implemented SourceRangeSet

A class that maintains a set of disjoint SourceRange objects. If an inserted
range intersects with an existing range, the ranges are merged before being
inserted.