Add port conflict detection to the service validation logic.

Part of #974 
If the validation is mostly to prevent user error, is even the race a net win?  

I kind of agree with the sentiment of doing the check above validation.

> On Sep 10, 2014, at 7:30 PM, Daniel Smith <notifications@github.com> wrote:
> 
> In pkg/api/validation/validation.go:
> 
> >  	}
> >  	if labels.Set(service.Selector).AsSelector().Empty() {
> >  		allErrs = append(allErrs, errs.NewFieldRequired("selector", service.Selector))
> >  	}
> > +	services, err := lister.ListServices()
> Validating this here is racy; it needs to be atomic with the etcd write, or you need to get a lock on an etcd key named according to the port.
> 
> I also don't like the precedent of pushing a cluster-wide constraint check into the validation stuff. Validation should (IMO) check formatting, syntax, etc--local constraints, not cluster-wide constraints.
> 
> —
> Reply to this email directly or view it on GitHub.