Move NSQ protocol into a dedicated control module, and begin restructure:

Prompted by @mreiferson's recently published documentation, I'm going to break
provider and comsumer functionality into their own modules and make the
`Connection` an accessor for the two. It turns out that NSQ is transactional
for everything but comsumer-side messages (the push'd ones). This means that
those "OK" responses that I just sort of been ignoring are actually meaningful.
 * Synchronized response/error (best effort for non-atomic ops) handling. Error/Response frames surfaced through appropriate callbacks
 * `Connection`..`subscribe` consumes `topic`, `channel`, and `callback`, which is fired on response/error from `nsqd`. `callback` has two arguments: `error`, and `consumer`. If no error occurred in `SUB` transaction, `consumer` will manage ready count and emit messages received on the specified channel.

The clustered API hasn't been reworked yet. Coming soon.