Adds DISABLED status for tasks in scheduler.

Tasks can get the disabled status either through scheduling or from repeated
failures. The scheduler handles disabling via repeated failures, and tasks
disabled this way are automatically re-enabled after a fixed amount of time
or when pruned. This allows tasks that are repeatedly running and blocking
progress on other tasks to be pushed aside until someone can have a look.

Tasks can be set as disabled via the disabled parameter in Task. Tasks with
this parameter set to true have will be scheduled as disabled and will not be
run. This disable can only be removed by setting disabled to false in the task
and re-scheduling it. This makes it easier to stop running broken tasks without
having to manually figure out all upstream dependents and remove those as well.
task.disabled tracks when the scheduler disabled a task. A task may also be disabled by a worker. We need to differentiate between the two because a worker can't undo a scheduler disable and vise-versa. We also need to track the time the scheduler made a disable so we can automatically re-enable it after the disable time expires. I've changed the name and made disabled always None when not set by the scheduler.