Async transport abstraction

Still needs a lot of polishing, but is in a working state.