Refactoring the type ordering functions to be more specific to the recently added 'singleton definitions'.
Converted the type ordering function over to ordering 'singleton definitions' because that is what it is intended for anyway.
Singletons are now sorted by dependency prior to instantiation.
Added better logging to understand how singletons are ordered prior to instantiation.
Refactored 'dependency plugins' into 'dependency providers' now added via an interface. I need to be able to query a provider for the type of the dependency in order to construct the entire dependency tree (for ordering instantiation of singletons) so a simple anonymous function isn't enough anymore.
Factory can now use the dependency providers to find types for known dependencies.
Removed the HasType functions to simplify the system and the tests.
Small refactor for better naming.
The SingletonManager now implements IDependencyProvider so that it can satisfy singleton dependencies to the factory.
Updated interface after integration testing.