refactor(di): move Dependency from key.js to binding.js
feat(injector): change injector to recover from errors

So it can instantiate an object after a failed attempt.
refactor(injector): cleanup
refactor(injector): change toFactory to use reflector to construct dependencies
style(di): add new lines
refactor(injector): implement support for nested bindings
refactor(di): make use of optional parameters
refactor(di): cleanup to make dartanalyzer happy
refactor(di): simplify Injector API
refactor(di): cleanup
refactor(di): use boolean instead of bool
feat(transpiler): add support for named params to new expressions
feat(injector): add support for default bindings
use Promise instead of Future
docs(di): add docs to di module
feat(transpiler): add support for getters
feat(benchmark): add a simple benchmark for the di module
refactor(collection): use Map instead of Object
feat(di): add metadata to Key
feat(ElementInjector): implement ElementInjector