Initial cut of a spreading and generic scheduler.

suggest removing from struct if it's never set. Also suggest repeating the names of the fields in the test cases for readability-- this is too many fields to keep the order straight in your head.