Improve botocore param validation

This pull requests improves the validation of botocore:

* Add the param name to all validation error message to make it easier to
  figure out which parameter failed validation.
* Validate struct/list types (recursively).  Members of these two types are now
  validated.
* Validate known keys for struct params.
* Validate required keys for struct params.
* Validate all params.  In some cases the `.validate()` method was not being
  called so I moved it up as one of the first things that happens in
  `build_parameter`.

I relaxed the blob validation to also accept strings.  This was one of those
situations where `.validate()` wasn't being called, as this started failing
once I started validating the blob parameters.

I've also cleaned up some minor pep8 issues (this is done as a separate
commit).

For testing, I've added a number of tests that also validate the error message
via `assertRaisesRegexp` as I think these are fairly important to users.

And to verify this without artificial data, I've also added unit tests for
`SES` that show the type of validation errors you'd get with an actual service.

cc @garnaat @toastdriven @danielgtaylor