Macros support.

Macro functionality is done through Annotations. When clicking on
expand macro annotation macro expands into the source code, annotation
to collapse is added to expanded region. When clicking on collapse
macro annotation macro is erased with expandee.

When triggering save command performSave function of
ScalaSourceFileEditor is called. Before actual save every macro is
erased with its expandee, so that source file doesn't contain any
macro applications.

Through createLineNumberRulerColumn function line number
column for custom line numbering is integrated. It internally stores regions, where
macros are and change line numbers where neccesary.

Macros can be turned off by clicking on the Enable macro icon,
M1+M2+M(Ctrl-Shift-M) shortcut or through preference page.
Changed to that:
    def constructMacroAnnotation(expandeeTree: Tree, originalMacroPos: compiler.Position, expansionString: String) = {
      if (expandeeTree.symbol.fullName == "scala.reflect.materializeClassTag" || originalMacroPos.start == originalMacroPos.end) None
      else {
        val annotation = new MacroExpansionAnnotation(expansionString)
        val pos = new Position(originalMacroPos.start, originalMacroPos.end - originalMacroPos.start)
        Some(annotation, pos)
      }
    }
    
    def mkMacroExpansionAnnotationScalahost(t: Tree) = {
      val Some(att) = t.attachments.get[java.util.HashMap[String, Any]]
      
      val expandeeTree = att.get("expandeeTree").asInstanceOf[Tree]
      val originalMacroPos = expandeeTree.pos
      val expansionString = att.get("expansionString").asInstanceOf[String]
      
      constructMacroAnnotation(expandeeTree, originalMacroPos, expansionString)
    }

    def mkMacroExpansionAnnotation(t: Tree) = {
      val Some(macroExpansionAttachment) = t.attachments.get[compiler.analyzer.MacroExpansionAttachment]
      
      val expandeeTree = macroExpansionAttachment.expandee
      val originalMacroPos = macroExpansionAttachment.expandee.pos
      val expansionString = compiler.showCode(macroExpansionAttachment.expanded.asInstanceOf[Tree])
      
      constructMacroAnnotation(expandeeTree, originalMacroPos, expansionString)
    }