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 

This is for a single download and the cutoff for multipart threshold is 8 MB and so there will be at most that much in memory (for a non-multipart download) since you can only perform an operation on one file when streaming.  This is memory issue is more concerning with multipart operations, which I will discuss at the bottom of the comment section.  On a side note, I like the idea of temporary files