Following the redesign discussion we've decided to try out an event loop based design as roughly outlined in this comment chain.
Its not 100% how well this will fit with our data and mental model so as an initial prototype we'll implement a skeleton for review.