XD-2098: Add KafkaMessageBus

Needs some more polish, but this is finally passing all tests
This should follow our standard structure (fields, then constructor, then member methods, then static methods, then inner classes).