Use WeakSet for tracking ignored nodes
Right now you mutate nodes you want to ignore by adding an _ignoreMe
field, and then expect to remove the field once the node has been successfully ignored. This can be better done with a WeakSet
which is specially designed to keep track of object references and support quick tests of "is this object in the set?".