INVITE changes and KNOCK module

This PR updates the INVITE command. This command was not restricted to channel operators, which in my opinion it should to be effective. 

I also implemented the KNOCK command and the +K mode that goes along with it. It's mostly what it was in 0.2, except I made it so that KNOCKs expire after a certain amount of time and the user doesn't have to reconnect in case the channel operators missed the KNOCK. The only thing I'm not sure about is the action that the +K mode uses (as I haven't been able to successfully test it because I couldn't find the proper action name to make it work).
This is now done using a WeakKeyDictionary, which indeed works great.