Improve stability and usability when using Quit()

Accomplished by:

Replacing BeginXyz with XyzAsync calls, which are easier to handle
errors for, and to cancel.
Ignoring callbacks after client has Quit()
Adding Connecting and Connected properties, so outside code can check
the connection state.