Configuration refactor

Significant re-work of bus-building internals. We now use an internal, "poor man's IoC" approach from within the BusBuilder so that 1) we can have deterministic disposal of all our components and 2) we're nicely refactoring-friendly.

Importantly, the bus configuration signature hasn't changed at all and neither has the observable behaviour. If your code worked with a previous version, it will work with this one.