Improved efficiency of highlighting and commenting large data sets

* I was attempting to use highlighting on files that were hundreds of 
megabytes in size and I found the feature to be quite slow, because I
believe an entry was being created for each highlighted position.  So
I came up with another scheme that made it much faster for my use.
* Added SparseRangeMap 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.