Extensible semantic highlighting

Includes mechanism for basic Scala AST based highlighting and Scalariform
AST based one.

Fixes #1001989
Fixed equals/hashcode contract for definitions
Semantic IDs intorduced