Use a "transport" abstraction, enabling users to choose to use RabbitMQ, SQS, Kafka, etc.

WIP