Enforce namespace unique constraints

This is the update to actually enable namespace support.

At the moment, I pass a namespace as a query parameter in order to support namespace scoping on the v1beta urls.  Once v1beta3 lands, I will modify to pass namespace in the path.  Note the client libraries were modified to make this easy to do, so should be a trivial change once ready.

I broke the commits into logical sections to improve readability.
So to external users, empty string means default.  To internal users, you have to explicitly invoke some code to get a value that allows you to search everything, so we can easily pick out places where we intentionally search everything (vs accidentally because "" == default init).

Makes sense to me.

----- Original Message -----
> > @@ -71,3 +77,12 @@ func ValidNamespace(ctx Context, resource *TypeMeta)
> > bool {
> >  	}
> >  	return ns == resource.Namespace && ok
> >  }
> > +
> > +// WithNamespaceDefaultIfNone returns a context whose namespace is the
> > default if and only if the parent context has no namespace value
> 
> I agree we should serialize with "default". I think what I'm asking for is
> for contexts to always start out with the namespace "default", so that this
> function is not needed. It's working around go's default value. Instead, I'd
> like a function that produces a namespace that finds everything for those
> few users that require that behavior.
> 
> ---
> Reply to this email directly or view it on GitHub:
> https://github.com/GoogleCloudPlatform/kubernetes/pull/1564/files#r18861162