channel: Improve userlist liveness guarentees

Fix a race where joined is True (so userlist appears live) but ENDOFNAMES has not been seen,
resulting in a partial user list.
Added a new attribute which is a waitable Event for the userlist being fully populated.
userlist: Make KNOWN_NAMES part of the UserList object
channel: Don't block by default

As these operations only need to block when strong guarentees are needed,
which isn't most of the time.
client: Add some aliases to the wait_for_ commands which are analogous to common async methods

Many users will be more familiar with a client.join() to wait for stop,
however I wanted to preseve the more descriptive names.
Getting things working, round 3