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.