Added template for app_data.py to locally store a developer's app credentials
Bug fix in query parameter -- needed to copy dictionary to prevent modifying dict
Updated with MultipartUpload model with working code from Morten Kallbert
Fixed range request on file download; initial attempt at multipart download working, needs cleanup
Now only concating pieces into final file when all piece downloads succeed, retry logic working
Added consolidation of file parts into single large file for multi-part download
Refactored multiprocessing scheduler into Executor class, separate from MultipartDownload class
Fixed bugs in executor, but still hanging when download fails
Replaced has_finished() with join(), fixed bug where tasks left in queue block new get() calls by workers; full stats no longer showing with verbose mode
Replaced temp files when multi-part downloading with seek() calls into large file (with lock for multi-process safety)
Added debug mode for multi-part download to write chunks to individual ttemp files then cat together to complete
Added md5 checking of multi-part downloaded file (whole only, not individ pieces)
Removed md5 check since S3 etag for large files is not a true md5; added logger to replace print()s in download code; removed unused code that calculated download speed/progress; general code cleanup
Naming downloaded file to have 'partial' extension during download, then removing when done
Added unit tests for single file download and multi-part download
Modified file downlod method to use file size to choose between using single or multipart download
Added unit_test_app example for users wanting to run unit tests
Added exception handling for byte ranges on file download
Fixed bugs in File downloadFile, added units tests for File downloadFile method
Refactored multi-part upload to use Executor object from multi-part download; multi-part download lock needs work to lock only local file write not download