Actually store task names (this is why I should test things)
Move removing/rescheduling tasks to the top of the scheduler loop, to allow tasks which themselves schedule other tasks
Use a raw string literal for the tasks.remove regex