Better tested discard functionality

* Change `id` for a NSQDConnection
* Refactor registering events for a new NSQDConnection created in Reader
* DISCARD is now called only if the DISCARD listener is registered.
* `message.finish()` is called always after exceeding `maxAttempts`
when `maxAttempts` is greater than 0
* Reader tests for new discard functionality.