This lets us use labels (or annotations), meaning we can experiment
with different clouds without changing the API.
We also add initial (experimental/undocumented) support for exposing a "Metal" provider.
Previously it worked on ClusterSpec, but that means we can't read the
labels or annotations. We want to use those labels/annotations to
experiment with new cloud providers (e.g. bare metal) before adding
this to the API.
Introduce generics so we also get type-safety.
If running with GCE "native" networking, we do not need the route
controller (and it causes problems); we turn it off by setting
--configure-cloud-routes=false.
In general we do not need the gkenetworkparams controller (and it
complains about missing CRDs). We will turn it off in future, but it
isn't in the images we are using currently.