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.
I was about to propose to just prepend the `gui.XOffsetStepFilter` to the existing stepfilter array, when I looked closer and learned that `gui.LineBoundaryStepFilter` and `gui.ParagraphBoundaryStepFilter` are actually stateful filters, which adapt to the environment which they have been used on first. Is that a common pattern? I do not have much experience with filters, so far assumed that filters are stateless/static. I see why the code is done like it is done, but think that there should be some warning/hint in the constructors of those classes about the statefulness. to avoid surprises with innocent users like me :innocent:
Not really part of this PR, so should be done/solved outside. Still happy to get an explanation here.