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
Merge pull request #124 from Shopify/fix-producer-deadlocks

Make sure we always call errorCb in flushRequest