Try and queue jobs when we think they're needed.

When you assign a new perspective, configure one, or configure a source,
we know that some new jobs need to run or that some existing data isn't
valid anymore.  This is far from perfect, though.

If the job is expensive, it'll run a bunch as you tweak it.  If you are
changing a bunch of configuration options at once, well... you can't, so
it'll queue the job multiple times, and maybe the combination of old and
new configuration variables might cause bad things to happen.

It's better than the manual queueing I've been doing so far in testing,
so I'm rolling with it for now, knowing the risks.