Enable distinction of consumers in QueueingConsumer

Since we explicitly support multiple consumers now, a consumer cancellation
will only cause #nextDelivery() to throw when we see cancellations for _all_
consumer tags we're aware of. Once thrown, the consumer cancel exception is
then discarded. Shutdown signals are treated similarly, except the signal
is always re-thrown in subsequent calls to #nextDelivery().