Make sure we always call errorCb in flushRequest

Also return an error when we fail to re-enqueue, and make sure to close the
channel in the errorCb used for synchronous sends.

In combination, fixes #65 

@wvanbergen @burke @fw42 @Sirupsen review please
Should we check whether the channel is closed where we are reading from it?