Implement dynamic di

This is an initial implementation of DI.

Please review only the second commit. The first commit will be gone once #45 is merged.

Why do we need resolving? A better way to do it is what we do in Dart. We let it run to certain depth, and than record the path in catch block. See: https://github.com/angular/di.dart/blob/master/lib/src/injector.dart#L181 and https://github.com/angular/di.dart/blob/master/lib/src/errors.dart#L20

Notice how we throw ResolvingException and then add to it in catch block. This makes sure that we don't spend time keeping track of things unless there is an error.