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.
Sorry, one last thought. Can you expand on this comment, so that it's clear to people when they should use a Client and when they should use a RESTClient? (arguably, we should place these in different packages, but that can come later.)