feat(directive-injector): detect and throw on circular deps

The maximum depth for depth for dependency resolution is set to 50.
No performance degradation observed on tree benchmark.
According to the Dart docs "A final variable can be set only once; a const variable is a compile-time constant." Indeed const sounds stronger and more correct.