Add file.py and ShardFile class, which allows one to slice into pieces and upload individual shards of a file
Move sizehelpers to bottom of file
Rename file attribute to private _f_obj attrib
Rename references to shards to slices for clarity
Fix logic error in calculating size on .read()
Fix typo on attribute check
Fix logic error where checking current location might never occur if callback is supplied
Add a boatload of unit tests for ShardFile class
Fix import of file module to be absolute
Py3 changes
Py3k requires __next__, not next() methods
Py3k compatible changes: call next(<generator>), not <generator>.next()
Refactor method to be a staticmethod, public
Add a len method on file
Change method signature on __upload_form_encoded; use ShardFile instead of open() call; make upload ShardFile compatible
Docstring fix
Optimize imports
Add two helper funcs, calculate_shards (to determine shard start and end positions, and parse_shard_size to determine a shard size in bytes from a predetermined string pattern
Use helper methods in upload CLI scenario
Add shard-size arg to CLI