client: Fix nick race cdns. Again.
linter fixes
message.match: strings are for string matching, re.compile() objects are for regex matching
message: Finish Mode()
replycodes: Add some more common codes
Getting things actually working, round 1
Improve error handling for messages

Instead of all errors during decoding being a "decoding error"
and all errors afterwards being an application error,
we treat all errors at any time of type InvalidMessage as a decoding error,
and all errors during decoding are cast to InvalidMessage by decode()
Getting things working, round 2
Ok, receiving messages seems to be working
client: Finish processing message before reading next

Otherwise we can't maintain a consistent state of what we're receiving

TODO we need some way to explicitly affect ordering of handlers for a message
herp:
More fixes