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.
So how does this differ functionally from calling `SlaveComputer.setAcceptingTasks`, which current strategies use without problems (as far as I know)? Should document the answer.