Improve structure of Async model by introducing AsyncConsumer, AsyncProducer, and AsyncConsumerProducer virtual base classes