added simple dependency provider

 - values can be created by factory
 - factory is a simple function
 - factory results are cached
 - factory can depend on other factory
 - dependency loop detection (plus detailed error description)