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