Ensures that dependencies have at least as high priority as dependents

This recursively passes priorities down to dependents so if task A depends on task B, task B must have at least as high a priority as A. This avoids situations where extremely high priority tasks only end up running after all the low-priority tasks have finished because it depends on the one that runs last.
No worries about being picky. This logic actually won't work in add_task unless we do a topological sort of the dependency graph and schedule tasks in reverse order so that we never schedule a task before its dependencies. If _update_priority ever encounters a dependency that hasn't been scheduled yet, we'll end up creating a new task with no stakeholders.

The extra delay occurs in priority because update_priority is the only time we try to dereference dependencies in the scheduler during scheduling. Scheduling currently traverses the dependency graph using a DFS. So lets say we have a root task A with two dependencies B and C. When we schedule A, update_priority tries to store its priority in placeholder tasks for B and C. Then the worker schedules B and all of its dependencies before getting back to C. If it takes a long time to schedule B and all of its dependencies and their dependencies and so on, there ends up being a large delay between when the scheduler first learns of C via A's dependency list and when the worker gets around to finally scheduling C. This will happen regardless of strategy if we schedule a task before all of its dependencies have been scheduled. No matter what you do, some dependency will have to wait to be scheduled.

I'd be happy to modify scheduling to go in reverse topological order. It's a fairly simple code change, but would dramatically change the behavior of the worker and increase memory usage. This would basically mean that we'd do all the completeness checks and build up the whole graph before scheduling anything, then schedule leaf-first. This could be pretty confusing to users at first, but extra logging messages could be added to make it more clear that stuff is happening during the graph-building phase.