Ask user to file a ticket when a `ScalaSearchException` goes uncaught
`IndexJobManager.startup/shutdown` are now thread-safe

* Prevent that a call to `shutdown` could happen while `startup` is running.
* Calling `startup` or `shutdown` twice will result in an exception.
* All accesses to the `indexingJobs` now always occur with the `lock` held,
  Hence the `concurrent.TrieMap` is no longer needed (the standard `HashMap`
  is likely faster as it doesn't contain logic for correctly handling
  concurrent accesses).
* Added a note to explain why the initialization of `observer` is done in the
  `startup` method and not the class' constructor.
* When reacting to `ProjectChangeObserver.onDelete`, delete the project's index
  only if it exists (I figured there is no need to log a debug message if the
  index doesn't exist).
* All methods in the `IndexJobManager` expect to be called only after the
  `startup` method has completed, and to never be called after `shutdown`.
  This assumption is now enforced in the code.
API for getting symbol at location

This commit provides an API for getting the symbol at a specific
location in a file. It introduces an implicit value class that
is used to add functionality to the presentation compiler.

A small test case has been provided

Fixes #1001662
Provides API for finding potential occurrences

This includes a new component, ProjectFinder, which is
responsible for finding the transitive closure of project
dependencies in the Eclipse workspace.

Additionally I added a new method to Index that allows the
API user to search for a given word in the index of a set
of projects.

Tests are included.

Fixes #1001663