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.
fix(dirty_checking): don't include marker records in DirtyCheckingChangeDetector.count

There was a mistake in which marker records were being counted, due to mistakenly referencing the
value DirtyCheckingChangeDetector._MODE_MARKER_, when the number is actually in file scope and not
bound to the DirtyCheckingChangeDetector class.
fix(testing): add raw value to Logger, rather than value.toString()

Don't string-ify values added to logger, so that it may compare object identities in specs.
fix(linked_list): correctly import and initialize _ArgHandler* lists and items

Previously, these classes were not being imported correctly (resulting in attempting to call a
property of an undefined value). Additionally, the next and previous properties of _ArgHandler
items were never initialized. These problems are addressed in this fix.
feat(linked_list): implement _EvalWatchList

This is somewhat self explanatory, _EvalWatchRecords need code to operate as a collection using the
linked list datastructure which is commonly being used in this library. It's similar to other LL
implementations.
fix(watch_group): don't call changeLog() if it is falsy

There is a better way to solve this, but I'll worry about it later.
fix(watch_record): add missing methods to _EvalWatchRecord, safer logic to _Handler.release()

Previously, _Handler.release() would attempt to read the _cache property from watchGrp, regardless
of whether or not it was defined. This change may or may not be the correct solution, I'll need to
investigate.

Additionally, I omitted to implement the remove() method of _EvalWatchRecord. This CL implements
the method.
fix(ast): ensure ConstantAST passes expression to super() in constructor

Previously, if ConstantAST constructor was called with only one argument (the constant expression),
then the expression would be passed to the superclass constructor as `undefined`, and cause an
exception to be thrown. This tiny hack fixes this behaviour.
fix(watch_group): implement _WatchGroupList, fix WatchGroup#remove()

Previously, due to _WatchGroupList not being implemented, the port of WatchGroup#remove() was not
completing most of its job. This CL implements _WatchGroupList, and adds the other important
pieces of behaviour to WatchGroup#remove.
test(watch_group): add remaining watch group tests

A number of tests are commented as `TODO`, these should be implemented or removed entirely after
some investigation. The porting of the various forms of function watches to ES6 is likely not a
1:1 change, which is why these have been delayed.