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.
Some python trivia for you:
Python can't optimize a lookup like that, because for all it knows doing a lookup on `linedata` may have a side effect.
In addition, a variable lookup **is literally** a dict lookup - if you call `locals()` the dict you get back doesn't just represent the local scope, it **is** the local scope.
This is why so much effort was put into making CPython's `dict` lookup as fast as possible, it's the single most common action in the entire language.