Json skeleton

This pull request made a couple changes and feature additions.
I added two new custom arguments:
* ``--generate-cli-skeleton``: This uses botocore ``ArgumentGenerator`` to print a JSON skeleton to standard output that can be used as input to the cli. This JSON can be redirected to a file and then filled out and used as input to the CLI.

* ``--cli-input-json``: This takes JSON (typically generated from ``--generate-cli-skeleton``) from either a string or some file and uses that as the input to the command line operation. Additional arguments can be added to command line. If there are collisions between the two, the value from argument is used over the value from the input JSON

To create these features, I made the following changes to the cli driver:
* ``enable/disable_call_operation``: These are methods that can be called to prevent the ``ServiceOperation`` from performing the botocore service operation call.

* emit the event: ``building-argument-table-parser``. This gives us the ability to determine all of the arguments that are going to be passed to the parser (including arguments that were added through a hook). This was needed to ensure the parser does not throw errors for missing required args.

* emit the event: ``calling-service-operation``. This allows us to see the entire configuration of the ``ServiceOperation`` before a call is made to botocore. That way we can edit the parameters that are going to be included in the call or even determine if we want the call to happen.

cc @jamesls @danielgtaylor 
That would be cool. It may be a decent amount of complexity because arguments passed into the command line are not always mapped to elements in the JSON skeleton. I feel that this could be added as an additional feature later down the road if it is requested enough.

The one foreseeable problem that we may want to discuss is whether the JSON skeleton should include arguments that were not present on the command line. I could see users expecting the JSON to be:

     {
        "MyArg": "foo",
        "Bar": "baz"
    }

On a side note this could be a great way to help people debug their commands, they could just add ``--generate-cli-skeleton`` with the command they are doing and we can easily take that file and run the exact command that they ran without having to manually duplicate what was entered on the command line.