Change IndexingJob scheduling logic

This moves the scheduling of IndexingJobs outside of each job.
Previously each job would keep track of changes to the given project
and then schedule itself for execution in fixed intervals and
index any files that had changed since last time.

The problem with this approach was the the Jobs would constantly
appear in the 'Jobs' view even when no changes were made because
the job had to run to figure out if anything new needed indexing.

The logic is now put inside of IndexJobManager such that it keeps
track of changesets and schedules indexing jobs only when things
needs to be indexed.

Fixes #1001794