Auto reconnection with the ruby-amqp backend

The reconnection logic doesn't like integration testing (too hard to
fiddle with event machine socket).

The following scenarios have been tested manually with
one publisher worker and one subscriber worker:
* Graceful restart of rabbitmq server.
* Dsniff's tcpkill (cmd line: tcpkill -i lo 'tcp dst port 5672')
  which destroys both the subscriber and the publisher connection

When the connection fails, the user error handler/notifier is called and
the log file immediately show:

    [connection] Lost connection. Reconnecting...

Additionally, if the connection was closed from a graceful restart of
rabbitmq, the log file will show:

    [connection] CONNECTION_FORCED - broker forced connection closure with reason 'shutdown'

The connection is then retried every two seconds. During this time,
all the workers are paused. Once the reconnection is successful, the
workers are resumed, and the log file will show:

    [connection] Reconnected

---

1. In a subscriber worker context, there is nothing to worry about, sit
back and relax until the reconnection happens.

2. In a publisher worker context, if the amqp connection got lost after the
psp flag was removed but before we the payload was sent
promiscuous sets the psp field back. If it succeed, the log file shows:

    [publish] will retry #{e.instance.try(:id)} #{e} #{e.backtrace}

Otherwise (but very unlikely):

    [publish] FATAL #{e.instance.try(:id)} #{e} #{e.backtrace}"

In both cases the user's error handler is called.

3. In a app instance publisher context (when using ruby-amqp, not bunny),
trying to publish during a request while the connection is lost will
raise a Promiscous::Publish:Error exception during the
after_create/after_destroy callback chain of the model.

In both cases 2. and 3., If the connection fails right after sending the
payload to rabbitmq, but before rabbitmq could process any data,
then we loose the data without knowing about it, and this is sad.

It could get solved with Publisher Confirms:
http://www.rabbitmq.com/blog/2011/02/10/introducing-publisher-confirms/
I tried to implement it, but didn't succeed.