Respect a requested PortalIP if possible

This will make DNS possible on a static IP.
We should - REST should use api/errors types, etcd should use api/errors/etcd to transform underlying calls, or api/errors in the case that the error is not etcd specific, but that the registry can more easily transform.

----- Original Message -----
> >  	} else {
> > -		service.PortalIP = ip.String()
> > +		// Try to respect the requested IP.
> > +		if err := rs.portalMgr.Allocate(net.ParseIP(service.PortalIP)); err !=
> > nil {
> > +			return nil, fmt.Errorf("User-provided PortalIP could not be allocated:
> > %v", err)
> 
> Should we be more dogmatic about always return StatusReason types in REST
> functions?  E.g. the prior block will return I-have-no-idea-what-code.
> 
> ---
> Reply to this email directly or view it on GitHub:
> https://github.com/GoogleCloudPlatform/kubernetes/pull/1982/files#r19347908