Co-dependency support

Added support for co-dependency between a dependency and a
dependant.

For example, consider the following cases :-

1. A bidi router depends on route-contributing components, yet each
contributor needs access to the overall composition in order to form
routes (without co-dependency support in component alternative injection
strategies are required, such as injecting through the Ring request).

2. A template renderer depends on model-contributing components, yet
these components need to call the template renderer to construct
pages. Breaking this cycle into an acyclic graph unnecessarily increases
the component count and reduces component cohesion and detail
encapsulation.