* The component registration record may now include a "name provider" (a
function returning a string based on an instance of the component),
which will be used to determine the component's name.
* NameProvider annotation indicates a method that returns the
component's name
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.
* Setting a component information record's name to null will lead to an
anonymous component, while setting it to an empty string will lead to an
component whose name is that of its class.
* New Anonymous annotation to indicate that a component is meant to be
anonymous (conflicts with ParametricComponent or valued Component
annotations).
* Incomplete class for component state tracking
* Incomplete components registry class
* Various exceptions for problems that can occur during component
registration