Switch to v2 of the waiter model

This adds three commits.

* First is to add HTTPStatusCode to ResponseMetadata.  Waiters use this value for some matchers
* Second is to implement the waiter v2 spec.  This was mostly a reimplementation and shares no common code with the v1 implementation, but the interfaces should remain the same.
* Third is to convert the v1 models over to the v2 models.

cc @kyleknap @danielgtaylor 
Can we rename the client's ``all_waiters()`` method to something like this where you make it a property of the class and name it ``waiter_names``? It is pretty confusing in the client because it seems from the name that you  be getting all possible waiters not the names of all of the possible waiters.