test(dirtychecking): simplify unit tests, rely on beforeEach less

The goal is to shrink specs so that they are more atomic, and performing less work. They should be
easier to follow and understand this way. However, there is more work to do, because the names are
still a bit awkward, and after splitting tests apart like this, it turns out that there is a lot of
work that is not happening.

This change also incorporates some major changes to the special matchers, in order to further simplify
the specs, and work with linked lists less. Linked lists are converted to collections of arrays for the
MapChangeRecords and CollectionChangeRecords, which is much simpler to work with.

Closes #10
test(watchgroup): simplify watchgroup tests, rely less on beforeEach()

Similar to b64c7f9003c7c9bf81093f808227d509da7f87ca, this patch simplifies the watchgroup tests, by
rendering them smaller, more atomic, and easier to follow.

These are still not perfect, but they are a big improvement over the previous suite.