Added the ability to stream data using ``cp``.

This feature enables users to stream from stdin to s3 or from s3 to stdout.
Streaming large files is both multithreaded and uses multipart transfers.
The streaming feature is limited to single file ``cp`` commands.

You can look at some of the documentation changes to see how to run the commands.
Here is a synopsis:
For uploading a stream from stdin to s3, use:
``aws s3 cp - s3://my-bucket/stream``

For downloading an s3 object as a stdout stream, use:
``aws s3 cp s3://my-bucket/stream -``

So for example, if I had the object ``s3://my-bucket/stream``, I could run this command:
``aws s3 cp s3://my-bucket/stream - | aws s3 cp - s3://my-bucket/new-stream``

This command would download the object ``stream`` from the bucket ``my-bucket`` and write it to stdout.  Then the data in stdout will be piped to stdin and uploaded from stdin to an object with the key ``new-stream`` in the s3 bucket ``my-bucket``.

cc @jamesls @danielgtaylor 

Yes, it is if the object is being streamed to standard out.  This is needed because if you are writing an object out to stdout while doing the md5 calculation, there is no way to erase the data sent to stdout if there is an md5error and needs to be retried.  Therefore, I write to a buffer that is later written to stdout once I have ensured the md5 is correct.  On the other hand for a file, I write to file as I calculate to md5 because I can delete the file if the md5's do not match.