Next problem: watchers should only be called if the property value actually changes.
Now we get the actual new value of the property a tad more early, and only call _watchCallbacks when the new value differs from the old one, in set and _changeAttrValue.

We could move this entire decision taking into _watchCallbacks, instead of doing it twice in set and _changeAttrValue, but that would change the signature and behaviour of _watchCallbacks.
The current semantics of _watchCallbacks is better. This allows other classes to "bypass" the whole shebang, and just "send events", as some existing usages actually do.
_watchCallbacks is not hindered by any intelligence. It just dumbly calls callbacks, which is ok that way.
No that we're at it, we best also expand the definition of "being the same". The equals method here is copied from dojox/mvc/sync.
Somebody should describe this, make this "equals" method and interface of something.

Now we still need some tests for the new equality. And then some documentation.