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.
The specific intent here (perhaps not a useful goal right now) was to make this structure effectively opaque outside the ``core.StepIterator`` class (you'll notice that the variables on this are marked as private). This ensures that this particular object is used for only one purpose, which is getting and restoring a step iterator position. 

Keeping the usage opaque means the data structure can be changed as necessary to improve performance (e.g.,  using ``core.PositionIterator.isBeforeNode()`` to avoid calls to slow offsets). In this patch, I made no attempt to speed up this particular part, but I have planned improvements for the ``OdtStepTranslator`` somewhere down the line.

Am happy to change if greatly desired, but, a ``core.DomPosition`` data-structure really doesn't expose any new or vastly easier behaviour here in my opinion.