if the error occurs somewhere else, this go-routine running `messageRouter()` wont be cleaned up for the connection that is now closed.

I'm not re-thinking where `transactionCleanup()` should go.  perhaps the original setup where it was deferred inside `messageRouter()` was fine, we only need to make sure that `messageRouter()` properly exits and cleans up whenever `close()` is called?  This can be done by re-setting `exitChan` whenever `ConnectToNSQ()` is called and `close(exitChan)` inside of `close()`.