Make uc_file an abstraction.

So, I have this idea to further abstract ubercart uc_file to bascially a "disk file api shell". I was working on project that was using S3, and we wanted to have uc_file serve from S3. The main problem I found was it's reliance on is_file, and is_dir.
So my approach was:

1) Make API calls to modules that can plug into a hook
2) Create a new base module for diskbased files
3) Create a new S3 module to implement for S3.

This is in its infancy as it was whipped up as a proof of concept in a few hours; however, attached is the result.

uc_file:
This is now just a shell API that makes module_invoke calls.

uc_file_disk:
This is the new base implementation for disk based files.

uc_file_s3:
This is the implementation of S3.

Please share your thoughts. I'm hoping iI can get this rolled into ubercart once it's massaged, etc.