feat(watch_group): initial WatchGroup/AST implementation

There is much work left to be done here, as additional tests need to be ported over from the Dart
code.

Some code has been moved into new files due to issues with RequireJS and circular dependencies. I've
tried to keep it in a sensible order, but improvements and refactoring are probably necessary.