Allow jobs to perform a pre-run check and be requeued

There are intstances (for example when an account is in maintenance mode) that
it would be unwise to actually perform a queued task. Only the task knows what
those conditions are for itself, so we delegate the job of knowing that to the
task in the canRun() method.

But now we have three outcomes for a job: Done, Failed, and Couldn't run. Add a
new method to the QueuedTask Model to support requeuing a job that isn't
failed.