Make delivery tags versioned

If processing a message takes a long time, automatic connection
recovery may reopen a channel before the message is acknowledged.

This will lead to confusing errors, plus the message will be requeued
anyway. To solve this, we track now many times a channel was recovered
and associate it with delivery tags. Then stale tags won't result
in basic.ack, basic.nack, basic.reject methods being sent.

Per discussion with Matthias Radestock.

Squashed commit of the following:

commit 1994868ee5a90b7199166130631b127e4a799f78
Author: Michael Klishin <michael@defprotocol.org>
Date:   Sun Aug 4 00:07:07 2013 +0400

    Files missing from the previous commit

commit 6e43eba28da93e9a2c45352adad7d985c95952a7
Author: Michael Klishin <michael@defprotocol.org>
Date:   Sun Aug 4 00:04:21 2013 +0400

    Make delivery tags versioned

    If processing a message takes a long time, automatic connection
    recovery may reopen a channel before the message is acknowledged.

    This will lead to confusing errors, plus the message will be requeued
    anyway. To solve this, we track now many times a channel was recovered
    and associate it with delivery tags. Then stale tags won't result
    in basic.ack, basic.nack, basic.reject methods being sent.

    Per discussion with Matthias Radestock.

commit 7e919a0dd5afc2aa533c41a29706f19f69a7d321
Author: Michael Klishin <michael@defprotocol.org>
Date:   Thu Aug 1 21:05:21 2013 +0400

    Docs

commit 20d5dbd040730e9a79424a2c0861c073c4ee9b2d
Author: Michael Klishin <michael@defprotocol.org>
Date:   Thu Aug 1 21:05:06 2013 +0400

    Introduce Bunny::Concurrent::AtomicFixnum

commit 6d78ddfdccea7138f6f089d6445c389dcdf39451
Author: Michael Klishin <michael@defprotocol.org>
Date:   Thu Aug 1 16:50:20 2013 +0400

    Wait here as well