Make BlockingConsumer#cancel idempotent

Make sure that Channel#basic_cancel is only called once for the consumer tag. As it is a raw RMQ exception is raised if you accidentally cancel twice (that's also the reason for the `rescue NativeException` in the specs, it makes the stack trace come out correctly when the test fails).
Move #cancel implementation from BlockingConsumer to CallbackConsumer

Also change its semantics slightly: it now returns true if it did anything, and false if it did nothing (i.e. the consumer had already been cancelled).

The implementation in CallbackConsumer is wrong, it does not flip the @cancelling, @cancelled and @terminated flags (which are defined by BaseConsumer, so maybe this should be moved up one more notch), and it does not guard against double cancel.

The three consumer classes should probably be overhauled. Maybe there should be only one now that we don't have any difference between blocking and sync.

Also, the enqueueing of the poison pill in BlockingConsumer should maybe be done in #handleCancel instead of #cancel, because messages can still be delivered after a cancel, can't they?
Merge pull request #28 from ruby-amqp/make_cancel_idempotent

Make cancel idempotent