A component with "drivers" will initialise/start its drivers after it is
initialised/started itself. It will also stop/destroy non-driver reverse
dependencies before stopping/destroying its drivers.
* Errors during shutdown or destruction will be thrown as exceptions.
Returning the collection of errors was clumsy, at best - if something
goes wrong, the registry has failed anyway.
* Recursive initialisation and destruction methods in ComponentState
* Use ComponentState's methods while initialising, starting up, shutting
down or destroying the registry.
* Incomplete class for component state tracking
* Incomplete components registry class
* Various exceptions for problems that can occur during component
registration