Rework assignment deferreds

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.
Hmm, wouldn't we want this after actually calling start()?  As it is right now we could up in a state where `start_deferred` and `start_called` could be in opposite states if start() fails for some reason.