Break up API client into per-resource client and common code

Refactor client code into per-resource client objects and a common client core. The purpose of this is to allow future composition of clients that access both Kubernetes resources as well as plugin custom resources.
+1; the interface change is good, but I can't see how it helps to arrange the structs like this?