Port range downloads into new implementation

Eagerly add the parts to the queue.  This required
creating a context object to track dependent task state,
similar to what was done for uploads.

I also noticed that we weren't cleaning up bad downloads
appropriately either so I've added code to clean partially
complete downloads.

The old multipart code has been removed.