[WIP] feat(ChangeDetector): unified architecture

**This PR is a WIP and will be subject to changes**

Status:

The PR should be closed to feature parity with the former implementation.
What I'll do next is to:
- reorganize the tests (split it across different files),
- add more tests for new features (TODO in the code),
- replace the old impl

To do:
- [ ] impl WatchGroup.toString()
- [ ] write a test for #1265 (should be fixed by this PR)
- [ ] Adapt the client code if #774 gets fixed (ng-repeat, ng-style, ...) The current code should work but could be simplified
- [ ] Use any method as filter (#934)
- [ ] Benchmark vs previous impl
- [ ] address #1091 

To discuss:
- Should prototypes have their own group and subsequent watches be added into their own group (probably better to keep 1 set)
- Should we allow coalescence for subsequently added watches (prototype only) -> was slower with the previous impl




Markers are linked in the lists to speed-up group removal.
If they were not:
- updating singly list pointers could by time consuming,
- we would still need to maintain a start & end records for the group (needed to iterate over group Records)