Moving over to plugin system for instantiate of lazy singletons.
First step is removing the factory's knowledge of singletons.
Added simple support to the factory for 'plugin dependencies'. If a dependency for a factory created object can't be satisified by the factory itself plugins are queried to determine if they can satisfiy the dependency.

This will allow me to move the support for 'lazy singletons' outside the factory, simplifying the factory code and putting all the singleton management into the 'singleton manager' where it belongs.
The singleton manager no longer automatically adds singletons as dependencies in the factory. It now caches them within the singleton manager and has a function that can be used to provide them to the factory (via the new dependency plugin system).
This is in preparation of adding support for lazy singleton management to the singleton manager.
Massive simplification of SingletonManager tests.
The 'dependency name' of a singleton is now stored as a string which better fits the way singleton are mapped to dependencies.
Refactor to split out singleton scanning from singleton instantiation.
Moved the code for scanning for singletons to a separate class.
Added support for lazy singletons that are only instantiated when resolved as a dependency.