Implement the X:Line commands

This PR implements the following commands:
- KLINE
- GLINE
- ZLINE
- ELINE
- QLINE

With the exception of server to server support (which I'll get on once this is reviewed) they are fully functional. I did run into a slight problem with the ZLINE command, where if a Z:Lined user connects, it disconnects them with a broken pipe rather than the actual ban reason. I'm not quite sure how to work around this issue.
OK, so in this case, it's turning four dict lookups into four dict lookups (or seven -> seven if you count the variables I didn't propose touching).  Up to you if you want to do this, but I still think it's a good idea.