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.
So this is to separate out the core of the client, which doesn't know about pods, services, etc. from the aggregate client. The aggregate client is still there. Maybe another name would be better... CoreClient? or CommonClient?