Uuuuuse striiiict
Running tests with several versions of Node.JS

All applicable versions of Node.JS, that is.
Mention extra Node.JS versions supported
Move confirm machinery to channel.js

This makes it a bit more delicate, since #pushConfirmCallback must be
called in very specific circumstances; but it makes the machinery
easier to test, e.g., in the case of out-of-order acknowledgements.
Advance the unconfirmed window over gaps

If acks arrive out of order, there may be gaps in the window. Whenever
we would advance the low water mark -- that is, when the tag is the
same as the low water mark -- we have to keep moving the window until
its either empty, or there's an unconfirmed message. To be able to
distinguish between entries that have already been resolved and
entries that are undefined (e.g., because a callback argument was not
supplied), `null` is used to mark resolved entries, and falsey
callbacks (which might otherwise be null) are replaced with `false`
specifically.
Use callbacks instead of promises for ConfirmChannel#publish

A disadvantage to returning promises from ConfirmChannel#publish (and
thereby ConfirmChannel#sendToQueue) is that it can no longer return a
boolean indicating write buffer overflow. So instead of returning a
promise, take a callback as the last argument. It's easy enough to
make it resolve a promise you've cons'ed beforehand.
Implement consumer cancel notification

This is a RabbitMQ extension: if a consumer will not receive any more
messages, RabbitMQ will send a cancel frame.

The most straight-forward, and I think idiomatic, way of representing
this is by calling the consumer callback with `null` instead of a
message. This lines up with how readable streams work (push `null` to
indicate no more values), and doesn't require any changes to the API
(other than the possibility of getting called with a null).
Account for consumer cancel in README example