feat(Change Detection): Add support for keyed access

Add support for:
- List[index],
- Map[index],
- Object[property]
In other places we use the semantics of the target language when evaluating an expression. For example, `1 + null` return 1 in JS, but throws in Dart. I think we should do the same here. In this case, we won't have to do any bounds checks -- just `obj[key]`.