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 kind of concerning to me given the size of files people will put into S3. Have you considered  using a temporary file? You could only use temp files if the download is large, and it would have the same behavior as a normal file except it is eventually written to stdout and removed from disk. What about writing a message out to stderr and returning a non-zero exit code (leaving retries up to the calling script if they want to use stdout)? Any other ideas you considered?