feat(Change Detection): Add support for keyed access

Add support for:
- List[index],
- Map[index],
- Object[property]
My thoughts on this topic:

Pros of the current approach:

* It is easier for an NG2.js developer cause the expression language has similar semantics to JS.
* It is easier for an NG2.dart developer cause the expression language has similar semantics to Dart.
* It makes our implementation more straightforward. We just delegate to the language itself. 
* It makes our implementation more performant. `a.invalidProp` throws in Dart, but does not in JS. To make it throw in JS we would have to check that the object has this property on every field read. This is expensive.

Cons:

* Developers that use both NG2.js and NG.dart can see different results when their hit such corner cases. But it will always be the case, just because the languages are very different. But I would not call them importable.