Use multipart uploads when necessary with mv command

Fixes #369.

The issue here was that the 'mv' command was not being tested
for multipart uploads so any time you used a 'mv' command we'd always
try to use a single PutObject operation.

The fix boils down to the `_is_multipart_task` method which shows
when something is a multipart upload task.

Long term I think most of this logic will be refactored into it's own
separate class but this fixes the issue for now.

Also, a 'mv' command was implemented as a 'cp' command plus a removal
of the local file.  This required a small update to the
MultipartUploadContext object that allowed for threads to wait on the
completion of a multipart upload.  There's a new RemoveFileTask object
that will only run once the associated multipart upload task is
complete.

Verified the `mv`'ing a multi GB file keeps memory usage under 200 mb.