feat(Change Detection): Add support for keyed access

Add support for:
- List[index],
- Map[index],
- Object[property]
I rather position the expression evaluation as "we are evaluating using the semantics of the host language" vs the expressions are "evaluated in the angular expression language". The second option does have the benefit of making transition of JS to Dart easier on templates (but what about the rest of the code). Also if we are to do it right, we have to spec out that expression language very carefully and explain the differences to the users. At the end it might be too much work and add unnecessary confusion.