removed custom deferred object implementation in favour of when
added a property for dependencies
implemented a ComponentAssemblyStrategyFactory