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.
Merge branch 'release-0.77.0' into develop

* release-0.77.0:
  Bumping version to 0.77.0
  Update the service model for several services
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.
Merge pull request #397 from danielgtaylor/json-bytes-blob

Support base64 encoding of bytes input for JSON blob types.
Remove unnecessary check for 'Date'
Check against Route53 parameter shape types
Merge branch 'fix-auth-date' into develop

* fix-auth-date:
  Remove unnecessary check for 'Date'
  Always set the sigv4 date to the current time
  Always set the Date header to the current date
Merge pull request #398 from danielgtaylor/route53-builtin-handler

Add Route53 ID customization to Botocore.
Handle error case for GetTemplate customization

Fixes aws/aws-cli#1044.
Merge branch 'fix-cfn-body' into develop

* fix-cfn-body:
  Handle error case for GetTemplate customization
Update opworks and sqs models
Bumping version to 0.78.0
Merge branch 'release-0.78.0'

* release-0.78.0:
  Bumping version to 0.78.0
  Update opworks and sqs models
  Handle error case for GetTemplate customization
  Check against Route53 parameter shape types
  Remove unnecessary check for 'Date'
  Always set the sigv4 date to the current time
  Refactor base64 encoding for serializers.
  Always set the Date header to the current date
  Add Route53 ID customization to Botocore.
  Support base64 encoding of bytes input for JSON blob types.