Enhancements to scheduler priority functions

 - Modified the existing spreading priority to consider service pods explicitly
 - Added a new priority function to spread pods across zones
Fyi, it is not necessary to register a provider in these packages. It works perfectly well to just register FitPredicates and PriorityFunctions e.g.
```go
func init()
      factory.RegisterFitPredicate("NodeLabelPredicate", algorithm.NewNodeLabelPredicate(factory.MinionLister, []string{"region"}, true))
      factory.RegisterPriorityFunction("NodeLabelPriority", algorithm.NewNodeLabelPriority("", true), 1)
}
```
The Provider is meant to be a some recommended set of configuration. These configuration can also include Fits and Priorities from other packages e.g.
```go
func defaultPredicates() util.StringSet {
      return util.NewStringSet(
            "PodFitsResources",
            "ServiceAffinity",
            factory.RegisterFitPredicate("NodeLabelPredicate", algorithm.NewNodeLabelPredicate(factory.MinionLister, []string{"region"}, true))
      }
}
```
I say this because only having only these NodeLabelPredicate and NodeLabelPriority seems like a sterile configuration that should not be recommended.