perf(Scope): use remove the need for the extra watch

Instead of using a counter and an extra watch, just schedule the reaction function via .

This gives us the same/similar ordering and coalecsing of updates as counter without the extra
overhead. Also the code is easier to read.

Since interpolation uses watchGroup, this change additionally improves performance of interpolation.

In large table benchmark digest cost went down by 15-20% for interpolation.
I was going to ask, because I don't see it splicing the array in the diff (but I might just be missing it).

However, is it really good to reverse the order of deregistration, assuming it's working currently? Should this be shift() instead of pop()?