gh-838

This PR addresses the 'Attempted to remove a dependant that was no longer registered' errors. Mea culpa, predictably enough - one of the recent changes was to allow dependants to register themselves against multiple keypaths (i.e. evaluators and computed properties with multiple dependencies - previously, they would create 'satellite' dependants), but the viewmodel still treated `dependant.registered` as either `true` or `false`.

So an evaluator that depended on two keypaths, and unregistered from one of them, would cause an error when it tried to unregister from the second.

This is now fixed. It prompted a couple of other changes, e.g. in how two-way bindings come to be notified that their keypath has changed.

@martypdx I want to run a couple of the changes past you before merging, since I think some of the code affected was yours originally - will comment on the relevant lines
Yes, makes sense. Code below was about getting element to update attribute on keypath expressions change. There's test(s), so if still working you've got it covered.