Exception handling in indexing process

This improves the exception handling in the entire indexing
process, that is, `Index`, `SourceIndexer` and `ProjectIndexJob`,

Generally `Try` is used to indicate that methods might fail. Most
failures related to indexing is handled in `ProcessIndexJob`. If
the index breaks it is deleted and a fresh one is created. If it
can't get the parse trees because the presentation compiler is broken
it will stop the indexing job and log the error. Files that can't
be indexed because of an IOException will be ignored and the
error logged

Tests have been added for the behavior of `Index` and `ProjectIndexJob`
when failures do happen.

Fix #1001629
Merge pull request #22 from mads379/1001629-handle-exceptions

1001629 handle exceptions in Index
Record occurrences of constructors

The occurrence collector now records occurrences of constructors;
that is both definitions and invocations. Test have been added for
the various ways you can define constructors.

Fix #1001622
Merge pull request #25 from mads379/1001622-record-occurrrences-of-constructors

Record occurrences of constructors
Now controls life-cycle of `ProjectIndexJob`s

The life-cycle of the `ProjectIndexJob`s is now managed
by `IndexJobManager`. It listens to `open/close/delete` events
on the projects in the workspace using `ProjectChangeObserver`.

Tests have been aded for both the `ProjectChangeObserver` and
`IndexJobManager`

I now manage dependencies between various components using the
cake pattern.

Fix #1001609, #1001610
Merge pull request #24 from mads379/1001610-react-to-open-and-close-events

Now controls life-cycle of ProjectIndexJobs
IndexJobManager does no longer inherit from Index

There is no need for ``IndexJobManager`` to inherit from ``Index``. Using
composition here is better and reduces coupling.

This is a follow-up on the discussion that happened in
https://github.com/scala-ide/scala-search/pull/24
Merge pull request #27 from dotta/transient/index-job-manager-alternative-design

IndexJobManager does no longer inherit from Index
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.
Merge pull request #28 from dotta/transient/random

Transient/random
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
Merge pull request #26 from mads379/1001662-get-symbol-under-cursor

#1001662 API for getting symbol at location
Improved test code of SearchPresentationCompilerTest

This makes it easier to produce new tests and makes
them more robust (i.e. we don't have to pass the
location manually)

Fixes #1001687
Merge pull request #30 from mads379/1001687-improve-test-code

Improved test code of SearchPresentationCompilerTest
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
Merge pull request #29 from mads379/1001663-find-potential-matches

Provides API for finding potential occurrences
Provide an API for comparing method symbols

The SearchPresentationCompiler can now compare two symbols and
check if they describe the same method.

This works even for symbols that have been obtained from seperate
presentation compilers; we use Importers to take care of that.

fixes #1001683
Merge pull request #32 from mads379/1001683-symbol-comparator

Provide an API for comparing method symbols
Added parent POM `plugin-profiles` for common plug-in settings

For building the plug-in you now need to pass 3 profiles:

* eclipse-indigo or eclipse-juno: To decide whether the build is targeting
  Eclipse Indigo or Eclipse Juno.

* scala-2.10.x: To set the Scala version. The only currently supported profile
  is the one for Scala 2.10.

* scala-ide-stable, scala-ide-dev or scala-ide-nightly: For the Scala IDE
  version that will be used as a targeted installation for the build.

The ./build.sh script is now the simplest way to build the scala-search plug-in.
The default build targets Eclipse Indigo and the latest Scala IDE stable release for
Scala 2.10.