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 hsould 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.