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.
capacity = total resources on the minion
requested = the combined resources requested (and hence deemed consumed) by all pods hosted on the minion

I just wanted to make clear that if requested exceeds capacity, then the existing pods have been incorrectly scheduled on the given minion. Given this, I will add the check and log an error in this case.