Fix Controller::escapeDir not chainable #tiny
Add Node::moveOutOf that should never be called
Move `move{Dir,Left,Right}` from Cursor to Controller

Also update text.test.js and updown.test.js. Note that haven't moved
over moveUp/moveDown, so updown.test.js momentarily hacky.
Move `move{Up,Down}` from Cursor to Controller

Also the onNotify(), and add a temporary Cursor.onNotify() classmethod
while the notify stuff is all on the cursor.

Get to remove temp updown.test.js hack (which was only for while
`move{Left,Right}` were on the Controller but `move{Up,Down}` were on
the Cursor).
Move backspace/deleteForward from Cursor to Controller

I'm pretty sure that the monkey-patched .write() in
RootMathCommand::createBlocks() is broken and will select rather than
delete the empty RootMathCommand, but I don't think it was broken by
this commit, this diff shouldn't change that behavior at all. Whatever,
RootTextBlock needs to be overhauled anyway.
Move `select{Left,Right}` from Cursor to Controller

MathCommand::deleteTowards called Cursor::selectDir, but can just inline
the relevant parts of Cursor::selectDir (in fact, just the selection API
that is lower-level than the Cursor methods that are being moved to the
Controller).
Inline Cursor::prepareMove()

It's only ever used in Node::keystroke in keystroke.js. I never liked
the prepare* methods, whereas I very much like the merger with the
notification system.
Move onNotify 'move' or 'upDown' to Controller

Next to escapeDir, moveDir, and moveUpDown, which call .notify('move')
and .notify('upDown').
Move onNotify 'edit' from Cursor to Controller

Next to Controller::deleteDir, its main usage. (Also used in
Cursor::writeLatex and the cut event handler in textarea.js, which are
kinda secondary to the 'Backspace' key, I feel like. Really though, I
want to move the notify stuff from Cursor to Controller, and this is the
last onNotify() call in cursor.js.)
Inline Cursor::prepareEdit into its sole use

...in the cut event handler in textarea.js.
Inline Cursor::prepareWrite

The inlined result is kinda uglier than before, but gets rid of the last
of the Cursor::prepare* methods.
Move onNotify, ::notify from Cursor to Controller #big

Woooh!
Merge branch 'refactor.notify-service' into refactor.keystroke