Filter out types containing `$` from type completions.

Don't wait for the JDT indexer when searching for types on the class path. 
This should make completions a bit more responsive. Refs #1001020.

Fixed #1001264.
Removed quadratic search for duplicates in the types added from class path.

Switched from ListBuffer to MultiMap, it is consistently faster in my tests. For large class paths this can make a big difference.
Added overload for `askOption` instead of the default argument.

This maintains compatibility with plugins compiled against the m2 release.
No timeout when running tests.

Added an environment option to suppress timeouts when running tests. This will make
tests more repeatable. The option is passed by default in the maven build for tests,
but if you want to run the IDE in that mode (for instance, in the debugger), make sure
to add -Dsdtcore.notimeouts to your command line options.
sbt crashes cause build errors. Fix #1001274.
Merge pull request #206 from dragos/issue/no-dollars-in-scope-completions-1001264

Performance improvements in completions
Wait for the indexer when asking for scope completions.

It turns out that not waiting for the indexer makes some tests flaky.

Re-enabled blocking wait for the indexer. Even if it is slow, it would be slow only the first time someone asks for completion, and should be fast afterwards. Something we might reconsider to be configurable.
Merge pull request #211 from vigdorchik/report_crash

Sbt crashes cause build errors. Closes #1001274.
Enabled test in OccurrencesFinderTest
Fixes #1001268 - No more NPE in update occurrences when a source is deleted

Deleting a source file could lead to NullPointerException (NPE) in
`ScalaOccurrencesFinder`.

The issue is actually easy to reproduce. Say you have a source `A` and that
`ScalaOccurrencesFinder.findOccurrences` was just ran against it. At this
point, the value of `ScalaOccurrencesFinder.indexCache` holds a reference to
`A`.  In this scenario, deleting `A` will cause a NPE to be thrown the next
time `ScalaOccurrencesFinder.findOccurrences` is ran against any other source.

The above described scenario happens because `ScalaOccurrencesFinder` is a
singleton, and `ScalaOccurrencesFinder.getCachedIndex` is used to check for
equality of source files. In the current implementation, checking equality on
source files throws a NPE exception if the resource does no longer exist (have
a look at `EclipseResource.equals`).

The fix simply consists in linking each editor (and hence each source file) to
a *different* `ScalaOccurrencesFinder` instance. By doing so, the
`ScalaOccurrencesFinder.indexCache` no longer needs to hold a reference to the
`SourceFile`, and hence the NPE can no longer occur.

An additional positive aspect of not using a singleton `ScalaOccurrencesFinder`
is that now the occurrences index (i.e., `MarkOccurrencesIndex`) is no longer
rebuilt while switching among the active editors.

Last, there are a number of refactoring that have been carried out, I'll
mention the three I consider important:

* The Eclipse `Job` instance used to execute the "update occurrences" task,
  used to have high priority (i.e., Job.INTERACTIVE), while it is now low
  priority. The reasoning is that while the information computed by "update
  occurrences" are useful, they are not critical.

* The signature of `InteractiveCompilationUnitEditor` used to return an
  `Option[InteractiveCompilationUnit]`, ant it now returns a
  `InteractiveCompilationUnit`. The reasoning here is that an editor should
  always have a compilation unit attached to it. The only moment when this is
  not the case is during the editor initialization, but calling
  `getInteractiveCompilationUnit` on a yet not fully initialized editor doesn't
  make sense, and hence this should fail fast (i.e., throwing a NPE is a good
  way to inform the developer that is doing the wrong thing, returning None is
  not as good IMO).
  Furtheremore, if you look at the implementations of
  `getInteractiveCompilationUnit` in `ScalaSourceFileEditor` and
  `ScalaClassFileEditor`, you will see that both implementations already assumed
  that a compilation unit is already attached to the editor (the compilation unit
  is wrapped in a `Some`, not in an `Option`). Therefore, returning an `Option`
  appears like an unneeded overhead, and the current implementation should work
  no worse than the former.
* Added debug output to know how much time is spent for
    1) Building the mark occurrences index, and
    2) end-to-end update occurrences action.
Refactoring in `ScalaSourceFileEditor`

* Organized imports.
* Moved fields declaration to the top.
* Moved inner class declarations in companion object.
* Reduced visibility of method `askForOccurrencesUpdate`.
* Reduced scope of `scalaCompilationUnit` and `getAnnotationModel` methods.
Merge pull request #210 from dotta/issue/memory-occurrences-leak-1001268

No more NPE in update occurrences after a source is deleted
Remove ScalaIDE product definitions and dependencies.

Fixed #1001281.
Merge pull request #208 from dragos/issue/no-timeouts-1001269

No timeouts when running tests
Merge pull request #212 from dragos/issue/remove-product-dependency-1001281

Remove ScalaIDE product definitions and dependencies.
Some notes for future clean ups.
Filter out getter/setters and synthetic methods when stepping.

A large commit that is hard to break down. :)

- Added support for skipping getters, setters and synthetic members
- fixed an exception thrown during testing because the UI was not present
- fixed another issue when the smart-stepping that caused coming back to the wrong stack frame (possibly Test #1001000).
- reorganized/renamed the filter methods

Fixed #1001137.
Fixed #1001283.
Step filters are now user-configurable.

Also, always skip bridge methods.

Fixed #1001088
Switched to non-deprecated API for preferences.
Faster completions for Java symbols.

Fixed two sources of slow behavior in `mkCompletions`, both related to inserting parameter 
names as suggestions for the chosen completion.

* don't retrieve method parameter names for Java symbols that are not methods (they can't have parameter names anyway)
* when calling `getJavaElement` pass the current project (makes no sense to look up types in other projects).

Fixed #1001287.