Expand the scope of the crypt module.

I recently noticed that actions were not encrypted, after reviewing the code I realized notices, actions, and channel topics all lacked encryption. This patch is a first attempt to add that in, I am open to all comments or suggestions for this patch set.

I have refactored it into a couple distinct sections, the notable ones are: incoming, outgoing, filters.

I also realized in my refactoring that we're not properly sending the messages to other connected clients. Because we need to send the unencrypted messages some code was more or less duplicated from Client.cpp to make this possible.
That can indeed be removed, it was a remnant of one of my previous attempts to make this work. I will temporarily close this pull request until I have a moment to fix this.