Refactor NodeProvisioner to allow for extension of strategies

Note to reviewers: [ignore whitespace changes](https://github.com/jenkinsci/jenkins/pull/1433/files?w=1) to see the logic changes more clearly.
Yes because it needs to modify the pending list... though with the change in locking I *could* just pass in the pending list directly now