Instead of tons of event loops for managers, devices, etc with shims, we should just flatten devices into a single event-loop-per-device that can be stored with a communication channel, basically giving us a simple actor format for async based concurrency.