Remove annotation #nodes property
Simplify use of expando cache to track annotations

I had this designed the wrong way up. Rather than storing pointers to
annotations in the expando property, I should simply be storing a
pointer to an entry in the expando cache which can be anything we like
(including a list of annotations).

This significantly simplifies the code, but it means we also have to
make a choice about whether the Annotations object assigns internal ids
to annotations it creates, or whether the expando cache stores direct
references to annotation objects.

I've gone for the latter option, which requires that we remove those
objects from the cache when the annotation is removed from nodes. As
such, the onchange event for annotations now contains information about
which targets were added or removed, much like DOM MutationObserver
MutationRecords.