Rework deferred handling for assignments

The stopped and started deferreds are now no longer deferred lists, but
normal deferreds that are fired manually under the right circumstances.
This allows jobtype implementors to start new processes after an earlier
one has already finished.
This also addresses the bug where the stopped deferred never got fired,
which made it impossible, among other things, to cleanly shut down the
agent.