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