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 
Is the downside to creating the client twice because of the concern for the perf hit?  I'm not opposed to adding this functionality to the client, but I also don't think creating the client is that bad.

Another option is alone a client to clone itself but with the ability to specify new params.  Maybe something like:
```
class BaseClient(object):

    def __init__(self, serializer, endpoint, response_parser,
                 event_emitter):
        self._serializer = serializer
        self._endpoint = endpoint
        self._response_parser = response_parser
        self._event_emitter = event_emitter
        self._cache = {}

    def clone(self, serializer=None, endpoint=None, response_parser=None, event_emitter=None):
        kwargs = < created kwargs from args and default to self._<attr> name if not provided>
        return self.__class__(**kwargs)
```