Expose waiters in the CLI

Add a ``wait`` command to all services that have waiters. For each type of
waiter, a subcommand representing that waiter was added. For example, to wait
for an ec2 instance to reach the running state, the wait command would be
specified as ``aws ec2 wait instance-running``.

With the CLI being in a weird transition state, there are some areas that I would like to improve on, but I believe changes to both the client interface and switching the clidriver over to clients need to be made first. I will point out these areas in the code. Let me know if you have any suggestions. Feedback on the places I point out would be very much welcomed.

cc @jamesls @danielgtaylor 
Since I instantiate, the client from the ``building-command-table`` event. I never get the ``parsed_globals`` that I want to use to build the client when I instantiate the command.

I thought about creating the client in the command's ``_run_main()`` method but that proves to be problematic because I need the client to figure out what waiter state commands that need to be added to the subcommand table. Also, I believe ``_run_main()`` is never used in generating html docs.

I was ultimately trying to avoid having to make the client twice, and the best way I was able to figure out is to create a new endpoint in the waiter caller and exchange the client's endpoint out with that one. The only issue is that the client endpoint is an internal method. So, it would be nice if there was a way to easily change endpoints in the client.