Custom Argument JSON Input

This adds support for custom arguments to take JSON input which is defined in a schema.

#### Overview
* Adds a `schema` setting on ` CustomArgument` objects
  * Based on [JSON Schema](http://json-schema.org/)
  * Uses `SchemaTransformer` to convert to the internal Botocore model representation
* Generates an `argument_object` for any `CustomArgument` that has a `schema`
* Updates `BasicCommand` to fire proper events for JSON shorthand / unpacking
* Updates `BasicCommand` doc handler to output JSON syntax info
* Adds tests for the above

@jamesls please review.