Improve reliability of large file uploads

1. Only use TransferManager for files larger than the multi-part
threshold (16MB).
2. Create and destroy TransferManager for each uploaded large file
since relative overhead is
    very small and and some usage patterns are causing the thread pool
to get leaked.
3. Always upload from File object since that is the only case where the
upload will be retried
    automatically by the AWS SDK.
5. Allow configuration of maximum number of upload parallel threads
    since the default of 10 performs very poorly and seems to cause
lots of
    errors, and can saturate network upload bandwidth.