MCOP-351 don't loop forever in the puppetrunner

It was possible to get into a situation where all the candidate
hosts remanining to run were already detected as being in a running
state.  As we were only checking the state of the network once
concurrency was reached this would result in an infinite loop.

Here we restructure `runhosts` to check the state of the network
when we reach concurrency, or when we fail to schedule a host as
it already appears to be running.