Initial commit of botocore client waiters

This allows for waiters to accept either the
Service/Operation interfaces or the client interfaces.

The interface for waiters using the Service.get_waiter() did change its interface
such that an endpoint is now required when _getting_ a waiter, instead of when you
_call_ the waiter.  This makes sharing implementations with client objects much easier.
You can see this change in the existing unit tests for test_waiter.py

I've also added some integration tests to show parity between the old interface
and the new interface.

cc @danielgtaylor @kyleknap