feat(Reflection): extract reflection capabilities into a separate module

This PR extracts reflection capabilities into a separate module, so that all reflection operations are executed by a single object: `reflector`. It enables running application without mirrors when compiled to Dart.

In addition this PR

* Renames Compiler.Reflector into DirectiveMetadataReader
* Removes ClosureMap
* Removes DI.Reflector

Reflection API:

We can register reflection information as follows

```
reflector.registerType(MyType, {
 factory: (a,b) => new MyType(a,b)
});

var factory = reflector.factory(MyType); // returns (a,b) => new MyType(a,b)
```

You can register factories, annotations, parameters, getters, setters, and methods. Please see the PR for more detail.

When the reflector does not have required info, it will use a `ReflectionCapabilities` object to get it. It is possible to reset the capabilities object.

```
reflector.reflectionCapabilities = new MyReflectionCapabilities();
```


I think using `=>` has perf implication because it correctly captures `this`. Please use standard `function() {...}` here.