Get a lot of IRC details out of places.

Events no longer act as parsers for raw messages; the raw message isn't
even required.  Instead, the particular message handlers in the client
are responsible for building events using their various APIs, as it
should've been in the first place goddamn.

This got rid of a lot of wacky cruft already.
Fix a couple little bugs with that last commit.
Implement a WHOIS coro.  Not finished, but nice plumbing.

This is an initial crack at the idea of listing upfront what responses I
expect to get back, and just collecting all those responses until I get
an "end" response (or an error).  It needs a lot of work, and has some
pitfalls (noted in comments), and has the additional pitfall I forgot to
mention of what happens if someone fires off a WHOIS without using this
whois function, but, uh, other than that, it's much nicer than the
horrible nonsense I've done for joining.