Add suppport to custom routing_key if passing a Queue

I need to use routing keys in my application - to avoid using multiple queues -, but dont want to it be fully asynchronous (eg.: I dont want to use Consumer class directly), so, i made this little modification to the Simple interface: When passing a `kombu.entity.Queue` class, it get the routing key from the Queue and use in the producer, directly.

This avoids the possible issue of, for example, when passing a `kombu.entity.Queue` with a custom Routing Key, the producer starts sending the messages to the wrong routing key, too. =)
MongoDB transport tests refactoring
Fix MongoDB transport connection string and options handling
Redis: basic_cancel must also send UNSUBSCRIBE for fanout queues
Hub.close now sets hub.poller to None
fix grammar
Adds Dustin J. Mitchell to AUTHORS
Call `heartbeat_check` in `ConsumerMixin`

This also adjusts the docs to be a little less specific about the rate
argument and a little more specific about how often the function should
be called.
retry forever if max_retries is set to 0
Now depends on amqp 1.4.0
Merge branch 'antlegrand/max_retries_is_zero'
Improve example in consumer user guide.  Closes #298
Merge branch 'djmitche/call-heartbeat'
Merge branch 'daevaorn/fix-mongodb-uri-parsing'
move heartbeat check to only occur on timeouts
Merge branch 'djmitche/call-heartbeat'
Merge branch 'fjorgemota/patch-1'
Adds Fernando Jorge Mota to AUTHORS
Changelog: Release-date hour should always be two digits
Bumps version to 3.0.9 and updates Changelog