fix bottleneck when using confirms

Publishing msgs using confirms can create a situation where
so many event listeners are registered that `exchange.removeListener`
becomes a significant bottleneck (see gist).

Instead of relying on EventEmitter we now register a single error
handler for the exchange and handle error disbursement manually.

TODO add tests, create a gist