Merge upstream

This merges upstream changes from sneakers/master onto our fork of that. This is primarily so I can more easily create a pull requests against the upstream repository to commit the Maxretry plugin.
We never use the publisher because it's fixed to only publish to this worker's exchange. Most of our use of Rabbit is stringing disparate systems together so we have separate publisher classes that live in the client gems consumed by both publisher and subscriber, where the sneakers bit is usually only on the subscriber side.