Change _wait_on_frame to allow an individual or list of frames to be passed in, specifying what to wait for
Small refactor based on AMQPObject._wait_on_frame change.
Update to make Channel wait for the appropriate responses
Add a default timeout
Refactor how the base channel deals with frame validation and waiting on frames

- Allow for a frame name, a frame object, a list of frame names or a list of frame objects when waiting on a frame
- Break out frame validation into its own method
- Don't block when reading from the queue but instead read while the object is in the opening, open, or closing state and check for exceptions
Change how exceptions are handled and allow for RemoteClose
Handle exceptions
Handle exceptions and Channel.Close
Handle exceptions better