Pretty sure this worked. There is a "containerless" branch now primarily around this commit:
Instead of using ServiceContainer, you just use Service and specify "start_before = True" in the class. Like this:
As proposed, the state machine for service is dramatically simpler and the state machine for container is completely gone. The only downside is you won't know when a service is in a state of starting children vs starting self, but I don't think we ever cared. The resulting state machine is also much more intuitive.
Can somebody please review before I merge into master?
-jeff