Support base64 encoding of bytes input for JSON blob types.

This pull request modifies the code added in ffcef5f to also support
arguments passed in as bytes, such as those you might encounter when
using KMS.

See this related issue: boto/boto3#31

Since the JSON data for serialization tests doesn't support specifying
bytes as input, I've added a new test class to cover this case.
Add Route53 ID customization to Botocore.

This change moves and adds to the customization [currently in the AWS CLI]
(https://github.com/aws/aws-cli/blob/develop/awscli/customizations/route53resourceid.py)
that handles automatically splitting Route53 resource IDs.

For example, `/hostedzone/ABC123` will be changed to just `ABC123` when
used as input to a Route53 service operation. The `Id`, `HostedZoneId`,
`ResourceId`, and `DelegationSetId` input parameters are all handled by
this customization.

This fixes an issue encountered in boto/boto3#28.

A corresponding change will need to be made to the AWS CLI to remove the
customizations there after this is merged in.
Always set the Date header to the current date

This fixes a bug where if you resend a request and resign
it without changing the date, you can get an auth error
that your signature is too old if the retry loops fall outside
the auth window (~15 minutes).

What was happening is that we were trying a failed S3 request,
but because we weren't re-setting the Date header, eventually
the retried request would have a signature that was too old.
Refactor base64 encoding for serializers.

This refactors the base64-encoding into a common method shared by
all serializers. The serializers now get the value using this new
method and just need to set it somewhere in the params.
Always set the sigv4 date to the current time

Part of the reason this change looks more complicated than
you would expect is because we use the sigv4 test suite
(http://docs.aws.amazon.com/general/latest/gr/signature-v4-test-suite.html)
to test our implementation.  However, these tests use a Date header
whereas previous versions used an X-Amz-Date.

We can possibly investigate always using Date instead of X-Amz-Date,
but we'd need to make sure we aren't introducing any regressions.
Remove unnecessary check for 'Date'
Check against Route53 parameter shape types
Handle error case for GetTemplate customization

Fixes aws/aws-cli#1044.
Update opworks and sqs models
Bumping version to 0.78.0
Dont fail tests if config file has sigv4 enabled

The unit tests should not be dependent on the values in your
config file.  This fixes a test failure where a test would fail
if sigv4 was enabled in the ~/.aws/config file.
Update S3 model to latest version

Fixes #392.
Don't import botocore, use fixed version

We'll need to update our tooling to populate this value,
but I believe this is causing the builds on readthedocs
to fail.
Refactor to decouple auth/endpoints and unify events.

This change decouples authentication from the `Endpoint` class and
introduces a new `RequestSigner` class to handle the signing of
requests. It fires the following events:

* `choose-signer.service.operation`: Allow overriding signature version
* `before-sign.service.operation`: Allow mutating request before signing

This also fixes the EC2 encrypted snapshot copying customization to work
with clients, as well as implements the changes needed for boto/boto3#39
(signature version overrides) and boto/boto3#30 (anonymous operations)
for the Botocore client interface.

The previous `before-auth` event is now removed, and all handlers that
previously used an endpoint's `.auth` property are now switched to
use the request signer. This may require changes upstream in the AWS CLI
as it is a potentially breaking change.

Additionally, the event emitter now supports an `emit_until_response`
method that will **stop** processing handlers once the first non-`None`
response has been received.

Tests have been updated/moved/removed accordingly.