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.
I'm pretty sure that, even given your goal, these individual structs are not necessary. Why not declare all the high level methods on a single struct? The interfaces separate things enough.