Refactored a bit of the async code.

WARNING: the async part is not yet tested at all.
Will work on a RabbitMQ test case looking at c.zamqp tests for hints.

For now async is disabled as it is activated only when the
[async] extra is pulled in.