Reimplement the client's PRIVMSG raw handler.

This is to make sure that we've got control of most, if not all of the logic behind it and at the same time we'll do some API changes to give way for some new features.