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.
Makes sense, it can be one single struct. However, I think it still makes sense to separate out the core client functionality from the thing that knows about pods, services, and replication controllers.