Break ILifecycle into Startable and Stoppable

Allow components to implement `start` and `stop` individually as required.

Closes #1