schedule: split Scheduler::next_thread() into separate functions