Improved efficiency of highlighting and commenting large data sets

* Added SpareRangeMap class which maintains a sorted vector of non-
overlapping ranges that map to a value.  The value type is templated so
that this data structure can be used for both highlighting and comments.
Lookups and insertions/clears are proportional to the number or
ranges, rather than the number of positions (ie. the size of the data
set), so that it is practical to use the feature for any size range in
any size data set.
* Both the highlighter and comments have been moved to use the
SparseRangeMap.
Fixed bug which would cause ranges to be inserted incorrectly

* Ranges which were past the end of the current ranges were being
inserted before current ranges.  This as been fixed.
Merge pull request #7 from dnewmarch/efficient_highlight

Improved efficiency of highlighting and commenting large data sets