Scheduler changes for extensibility

The predicate and priority functions are now configurable. Currently the default ones are being used but different functions can be selected by providing arguments to the factory. For now, in order to customize the scheduler, the scheduler main/executor function is the one that needs to be changed. The function selections can be based on configuration in etcd (there is a separate issue tracking that --> https://github.com/GoogleCloudPlatform/kubernetes/issues/1627).

Also, I have taken the first step towards allowing/combining multiple priority functions and using a simple weighted average for the combined score.
Generally you don't return private types - you either return a public type or an interface.