Expose concurrency as an option

This also limits the maximum number of concurrent operations to 16. This is
good practice for large files with thousands of parts. Instead of blasting S3
server with all thousands of requests simultaneously, making a small number of
them at a time increases stability.

This is also necessary when you want to create upload stream from the same
source file, because their is a limit to how many simultaneous streams you can
create from a file.

This does not result in any speed loss at all. On the contrary, it increases
throughput for large files.
Replace multiple files with multiple streams created from the same file

This gets rid of the initial delay which is necessary to split the source
file into multiple temporary files. For large files (> 5GB) this delay can
be at the order of minutes which is more than the time required to actually
upload the file.

Of course this limits the number of simultaneous requests we can make.
Retry chunks which have failed
Cap number of retries and make it an option
Merge in request from shahriman
Update to 0.1.4