add and use Cursor::notify framework

an inversion of control makes expressing the logic of "do foo when
anything happens besides bar" much cleaner than what we currently do,
which for each thing except bar, say "do foo"

if you wanted to make it out like a deep insight, you might call
this "the observer pattern"