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.
Of course I missed the `private` markers :tomato: and thus the idea to have this structure opaque. Now I see. Okay, if that should follow the memento pattern (now that at least is passive vocabular for me :) ), then it makes sense.