Nsq integration

This implements the design discussed in #50 . Resolves #50 #61.

Former. The `receive` method expects `sender` to be a parameter and only uses its `name` attribute. When `receive` is called for local messages, the `sender` is of type `IRCUser`. However, when `receive` is called for a remote message, the `sender` is a dictionary (because of the structure of the remote message).
I am looking into a few ways to make it prettier, feel free to throw some ideas in.