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