Fixed too much memory usage for s3 streaming

Added memory usage tests as well for streaming uploads and downloads.
Incorporated feedback on stream tests.
Cut down memory use in stream testing
Merge pull request #924 from kyleknap/stream-memory

Fixed too much memory usage for s3 streaming
Update CLI to work with normalized botocore models

This is a backwards compatible change that udpates the CLI to
work with the new model format exposed in botocore.  The biggest
change here was the removal of botocore parameter objects.  The
botocore paramter objects were separated into various modules,
so the CLI needed to be updated to account for this.

This also made the distinction between the CLI and botocore more
distinct.  Previously botocore parameter objects had things like
`cli_name` in them.

Essentially, anything that previously took a botocore param object
now takes one of two things:

* the awscli.argument.BaseCLIArgument type
* the botocore.model.Shape type

The former has various capabilities specific to the CLI (what the
CLI name is, what it's CLI type is, etc.).  The latter has information
about the expected structure of the value of that argument.  This is
used for things like shorthand processing.

Depends on: https://github.com/boto/botocore/pull/340
Merge branch 'model-v2-integrate' into develop

* model-v2-integrate:
  Update CLI to work with normalized botocore models
  Cut down memory use in stream testing
  Incorporated feedback on stream tests.
  Fixed too much memory usage for s3 streaming
Added custom sync strategy

Allows developers to easily write custom sync strategies for ``s3 sync``
command.
Add more customizations to sync strategies

Allow developers to make strategies for when files do not exist at the
source or when files do not exist in the destination.
Made seperate directory for  sync strategies
Cleaned up the custom sync strategy code