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