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.
Obviously what you're doing here is correct since the test passes, but I didn't understand it. It would be great if you could add a more extensive comment. I thought the priority function (the code you changes in priorities.go) is (capacity - requested) / capacity, scaled to 0-10, and then you take the average of the memory and CPU score. So why isn't this
machine 1/pod 1 (CPU only): (4000-1000)/4000 -> 7.5
machine 2/pod 2 (mem/CPU): (4000-2000)/4000 + (10000-3000)/10000 -> avg(5,7) -> 6