Rewrite of line boundary movement actions

Rewrite of line boundary detection logic to address numerous cursor movement issues (#555, #405, #227, #225, #224, #185, #124 and #98).

This also removes the last uses of the gui.SelectionMover class, allowing it to be removed in a subsequent PR.
Agreed, `reset` functions would only be another variant of the same problem.
No idea about `Classifier` and `Acceptor`, not yet part of my vocabular (but guess I should add it, scheduled for tomorrow). So if those might be better matches...