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).
We should probably only be using one now() rather than them repeatedly (in case it rolls over in the middle of the loop).

For added bonus, we can store the times as datetime objects like we do everywhere else, and use a timedelta on the knockDelay to generate the datetime object to compare against instead of using timestamp(now()).