Showing variable values in hovers when in suspended debug mode

Support for showing variable values in hovers when in suspended debug mode.

The hover shows values when hovering over local variables & class fields. Care has been taken for the hover to never show wrong values upon hover (the automated tests test this), although, I cannot rule-out possible bugs.

Some implementation details:

 * The sdt.core project now exposes a new extension point (`scalaHoverDebugOverride`) that allows its text hover to be overriden by a plugin. The sdt.debug project provides an extension for this extension point.
 
 * The main logic of this commit is implemented in the `StackFrameVariableOfTreeFinder.find(...)` method. This method takes an ast node (`compiler.Tree`) as input and (if possible) returns the `IVariable` from the stack frame that corresponds to the given ast node.
 
 * Once an `IVariable` is sucessfully found, it is fed to the presentation component that is used internally by the jdt, which presents complex objects in a tree with collapsible sub-trees. Whenever an `IVariable` is not found, the existing implementation of text hover (the one before this commit) is used.
 
 * Some hacks are employed in the implementation (e.g. looking for stack-frame variables that are named `"$this"` or `"$outer"`).
 
 * The `ScalaDebugger` class now also keeps track of the currently selected stack frame.
 
 * A test case exercises the `StackFrameVariableOfTreeFinder.find(...)` function.

Fixes #1001732
I don't think it would be possible to simply promote the helpers to be private methods of the object, given that almost all of them depend on values of types that are path-dependent on the `compiler` that is passed to the `find` method.

I could do something like the following code fragment (i.e. turn the object to a class), but it doesn't look very neat because a bunch of useless code lines are added, and I'll have to do that cast.

```
object StackFrameVariableByTreeSearch {
  def apply(src: SourceFile, compiler: ScalaPresentationCompiler, stackFrame: ScalaStackFrame)(t: compiler.Tree) = {
    val s = new StackFrameVariableByTreeSearch(src, compiler, stackFrame)
    s.find(t.asInstanceOf[s.compiler.Tree])
  }
}

class StackFrameVariableByTreeSearch(src: SourceFile, val compiler: ScalaPresentationCompiler, stackFrame: ScalaStackFrame) {
  def find(t: compiler.Tree): Option[IVariable] = {
```

If someone is aware of a better way, I would like to hear of it.