Mechanism for creating custom semantic annotations

This mechanism is based on custom reconciliers (like implicit
highlighting), and provides easy way to extends Scala IDE with ability to
annotate your own method calls.

Fixes #1001989
Constructor calls are no longer highlighted
Warnings removed
Appending to Seq fixed
Disable javaextdirs setting in Scala projects.

This setting is appended to the Scala class path. It defaults to the running JDK
extdirs, and that can cause trouble when the project JDK is different from the
JRE used to launch Eclipse.

Fix #1002072
Merge pull request #644 from afitz/semantic-annotations-1001989

Fix for #1001989
More robust handling of virtual files.

Don't crash the builder if a source file does not have a corresponding
Eclipse resource.

Fix #1002073
Removes misc deprecated and unhygienic elements.
Merge pull request #659 from huitseeker/issue/lints

Removes misc deprecated and unhygienic elements.
Merge pull request #658 from dragos/issue/extdirs

Disable javaextdirs setting in Scala projects.
Remove preference store listener on deactivation

The listener would try to redraw a disposed widget on preference changes, even after
the editor was closed.
Cleans up more warts (mostly Option-related)

- if your pattern-match on option has no guards on the Some, let the
other case be explicitly None, this will avail you of the totality
check.

```scala
  case Some(x) if (condition) => ...
  case _ => ...
```

 is ok, and so is the case where x is replaced by a refutable pattern. But

```scala
  case Some(x) => ...
  case _ => ...
```

 is usually more safely written

```scala
  case Some(x) => ...
  case None => ...
```

- Don't hesitate to use foreach, exists, map, forall, orElse, getOrElse on Options
  http://blog.tmorris.net/posts/scalaoption-cheat-sheet/.
Merge pull request #661 from dragos/master

Remove preference store listener on deactivation
Merge pull request #662 from huitseeker/issue/morelints

Cleans up more warts (mostly Option-related)
Correctly determine if compiler settings were changed through the UI.

Also, make sure the dialog prompt to clean all projects appears only when settings were really changed.

Fix #1002075
Remove all traces of `Trim`

This class never really pulled its wait. Since it was the root cause of
the bug just fixed, the only remaining use was removed. It conflated `String.trim` and `isEmpty`
in one go.
Merge pull request #665 from dragos/issue/rebuild-too-often

Don't clean workspace unless compiler settings really changed