Added overlap point and span data structures

In order to properly handle block selection the code base needs to
represent a partial / overlap SnapshotPoint.  Consider that a tab is
made up of tabstop spaces.  BlockSpan needs to be able to represent a
point which has only a portion of those spaces.  The
SnapshotOverlapPoint and SnapshotOverlapSpan data structures do that.
Increased usage of overlap data

This change begins to plumb the overlap data through the system.  Still
needs to get into some more places but making progress