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
hah, I suppose it is. I was thinking it's also the past tense of 'rebind', since it's what needs to happen immediately *after* a rebind.. I wanted to avoid just calling it `rebind` because it's not the same as other `rebind` methods - wondered about `onrebind` but then I got bored of thinking about it! Will take any alternative suggestions, if you have any