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.