Initial cut of a spreading and generic scheduler.

getMinHosts assumes a sorted list. You could take advantage of that by breaking out of the loop when hostEntry.score != list[0].score, which would be the moral equivalent of a while loop.

Anyway, this wasn't important. I was just commenting while skimming the PR.