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.

Closes #11