Validate list type parameters

Wanted to see what everyone thought about this.  Previously, if you had a list param, you could send it:

```
some_list_param={"foo_key": "bar", "bar_key": "foo"}
```

instead of:

```
some_list_param=[{"foo_key": "bar", "bar_key": "foo"}]
```

This only worked for a single list element.  I wanted to see what we thought about removing this behavior.  Instead, the new behavior is that if you have a list parameter you **have** to send it a list, we don't automatically convert it to a one element list for you.  In addition to being more explicit it also makes it easier to understand the error messages (both client side validation as well as server validation errors).

Note that this PR is branched from the `struct-validate` branch (boto/botocore#100).  The only new change is 44d26db15fc6caf64b5a4419e223452307bc712f.

cc @garnaat @toastdriven @danielgtaylor