Now controls life-cycle of ProjectIndexJobs

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.

Fixes #1001609 #1001610