Greedy scheduler

A greedy scheduler assigns as many strands to processors as possible in each time step, never leaving a processor idle if there is work that can be done.