[WIP] feat(Change Detector): Add support for collection deep watch

**Work in progress**

Add support for deep watch (collections are normally watched by ref only).
I do not think we should have the `Collection` AST node. 

1. Currently all AST nodes are created by the parser. Collection is the only special one.
2. AST nodes represent the syntax tree of an expression. `{{a}}` has the same syntax tree regardless of how it is watched. The `deep/content` flag is extra semantics added by the change detection, not part of the syntax.
3. We wrap the given AST into a `Collection` and then immediately visit that `Collection`. Why do the wrapping?

If we make the deep property part of the syntax (e.g., `{{:a}}`, where `:` means deep), then it should be represented as an AST node.