Switch to a normalized (v2) version of the models

This changes the internal model format used by botocore from the denormalized
models to a normalized format.  This required a number of changes to botocore's
interals, particularly around parameter serialization and request parsing.

A brief summary of these changes include:

* Move all parsing logic to a single module
* Move all serialization logic to a single module.
* Add an abstraction over the JSON models (model.py).  This allows us
  to compute some of the customizations at runtime instead of needing
  model translations.
* Consume this model format directly.  There is no more need for
  `scripts/buildall`
* Move param validation to a separate module.  This isolates that
  logic into a single location
* Split the botocore params into the various components (models,
  validation, request serialization, response parsing).
* This removed the need for payload objects as well
* Fixed numerous response parsing bugs
* Fixed a serialization bug related to XML map types
* Add support for recursive shapes
* Add support for setting signature version via _endpoints.json
* Add an alternate interface of client objects.
* Remove the need for protocol specific endpoints.
* Normalize response dicts.  They will always have a populated
  ResponseMetadata key that contains at _least_ a RequestId.
* Normalize errors.  There's now only a single error, and the error
  only code/message is always populated
* Param validation runs through all the validation rules and gives a report
  on all validation errors.  Previously we'd raise an exception as soon as we
  hit a validation error so we'd only get the first validation error.

Eventually I'd like to move everything over to client objects.  For now
both interfaces exist.  You can use the Operation.call() or
session.create_client().

Note that there will need to be corresponding changes to the AWS CLI
as well (PR being sent for that shortly).
Merge branch 'model-v2-integrate' into develop

Closes #340.

* model-v2-integrate:
  Switch to a normalized (v2) version of the models
Remove smart quotes from SWF model
Remove more smart quotes from SWF model
Use six.integer_types instead of ints for param validation

On python2, this accounts for the `long` type.
Bumping version to 0.64.0
Merge branch 'release-0.64.0' into develop

* release-0.64.0:
  Bumping version to 0.64.0
Fix regression when handling 200 error responses from S3

We now do not try to parse the error response unless it's an error
HTTP status code.  This means the handler needs to be updated such
that _it_ is the one that does the Error parsing.  Fortunately, we
don't need to fully parse the XML error response.  We just need to
know that the top level key is an Error node before saying we
need to retry the request.
Add denormalized structure builder

Useful for writing tests or manually creating structures.  It's
typically easier to hand write a denormalized model than it is to
write a normalized model, at least for simple cases (as is common
in tests).
I really miss seeing the full response body in the debug output.  This puts it back.
Add comments and docstrings to builders

Explains how to use the classes and the purposes of several
of the classes and tests.
Merge branch 'fix-s3-200-errors' into develop

* fix-s3-200-errors:
  Fix regression when handling 200 error responses from S3
Merge branch 'garnaat-response-logging' into develop

* garnaat-response-logging:
  I really miss seeing the full response body in the debug output.  This puts it back.
Merge branch 'add-denormalized-builder' into develop

* add-denormalized-builder:
  Add comments and docstrings to builders
  Add denormalized structure builder
Update dynamodb and ec2 models to the latest versions
Merge in credentials file info in config

Affects get_scoped_config() and the full_config property.

Now when retrieving configuration, the values from the shared
credentials file are merged in.
Bumping version to 0.65.0
Merge branch 'release-0.65.0' into develop

* release-0.65.0:
  Bumping version to 0.65.0
  Merge in credentials file info in config
  Update dynamodb and ec2 models to the latest versions
Add waiter config and fix config lookup

We need to use the service_name and not the endpoint prefix.
These aren't always the same thing (emr vs. elasticmapreduce).

Also added some integ tests to ensure we don't regress on this again.

Fixes #937.
Merge branch 'add-waiter-configs' into develop

* add-waiter-configs:
  Add waiter config and fix config lookup