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.
Done