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.
Stateful filters did feel unexpected to me as well. Unfortunately, I didn't have any genius ideas for other names or designs. I have toyed with putting a ``reset`` function on the filter to make them non-stateful (i.e., reset is called by ``GuiStepUtils`` before the filter is used)... but dislike that because it requires the dev to remember to clear all instance variables.

Alternative names would be ``Classifier`` or ``Acceptor``, which are concepts related to finite state machines (which these are somewhat). Would either of those sound better to you?