Manage bunny connections better

Changes include...

* Major refactor of how rabbit feed manages its Bunny connections. Previously, it maintained a pool of Bunny connections, now it will maintain a pool of Bunny channels, which is a lighter-weight approach.
* Improve how we recover when an operation fails due to network connectivity problems. Instead of closing and re-opening a connection when retrying failed operations, it only closes the connection if Bunny is unable to recover the connection on its own. Added a script that can be used to assist with connection recovery testing.
* Refactor of the features and steps to be more concise
* Correct Airbrake notification method to ensure errors are only raised when appropriate
* Provide message properties on publish, which allow you to view in more detail what types of messages are queued.

@pvdb @dawid-sklodowski @danisola @calo81 @nronas Could you please sign off?
connection concept seems a bit overloaded. If I understand correctly, this method calls the `open` method on the `Connection` module, and the `ConnectionPool` is actually a pool of `Bunny` channels.. and the `connection` received in this block is a `Bunny` connection?... a bit hard to follow, but again. first time looking at the code. So if I am not making sense ignore this