JobType Rework

This pull request is a rework of the base `JobType` class and associated modules.  The changes here are based on a thread on [discuss@pyfarm.net](https://groups.google.com/a/pyfarm.net/d/msg/discuss/er2e44kiPBE/JwVnOn43U-4J).
This part reads really confusing.

Why are we stopping the assignment immediately after starting it?

If I had to guess, I'd say that, probably, the stop_() method doesn't stop the assignment, but rather just returns a deferred that will fire when the assignment has stopped, as opposed to the one returned by start, which will fire when the assignment has been started. If this is true, that raises some more issues:

- We are calling restart_if_necessary on the start deferred. Immediately after an assignment has been started is really the worst time for restarting the agent.
- If start_() starts the assignment, then to be consistent, stop_() really needs to stop the assignment. If you just want to get a deferred that fires when the assignment has stopped (for some other reason), then you should create a method like get_stopped_deferred() or have start_() return a tuple of deferreds.