added main, highlighted, relevant ranges

The DiagnosticMessage class now supports one main range, and multiple
highlighted and relevant ranges that should be included in diagnsotic messages.
fixed src mgr locations

Fixed the calculation of locations in the SourceManager. Also added the
PresumedRange class that represents a range of PresumedLocation objects. Added
operator<< for the classes in SourceLocation.hpp for convenience. Also added a
unit test that checks the integrity of the locations the SourceManager produces.
Helped debugging quite a lot.