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 

It is easier to use when I track progress.  The ``...`` convention represents that I do not know how many parts I am to expect.   The same ``...`` convention is used when the number of files being transferred is unknown as well. If I use ``None``, I would have to do some additional conversions such that ``None`` becomes a value that I can concatenate to a string.  However, since I do not actually show the progress bar when streaming files, I could change this if needed.