Actually on second thought we should standardize on the implementation in ApplySerachDataOffsetStartEnd because of a subtle performance issue.

Every time you call GetContainingLine it returns a new instance of ITextSnapshotLine.  So this implementation is allocation a new line for every single point that it visits.  Instead of once per line that is visited during the traversal.  

The ApplySearchdataOffsetStartEnd implementation uses SnapshotColumn.  This type is optimized to cache ITextSnapshotLine instances as the column moves back and forth over the same line.  It will only allocate a new line when the column shifts to a new line.  

This may seem like a silly thing to worry over but it can have a dramatic impact on performance.  I wrote the SnasphotColumn type because several profiles of VsVim showed that allocations of ITextSnapshotLine were dominating a lot of scenarios.  SnapshotColumn centralized the key logic and eliminated a lot of unnecessary allocations. It's particularly important for code paths that are called from search because search actually happens quite frequently as a part of the `:hlsearch` implementation.  In large files it adds up very fast.