Ensure that kubectl get works with downstream resources

Commit a198a62 introduced a dependency linking the Kube API versions to the implementation
of watching resources used in kubectl.  This removes that dependency and allows conversion
to be handled by the ObjectConvertor defined in the kubectl factory.

@lavalamp review please
I agree part of the problem is having two totally different types of printers - those that deal with objects of a known type (ResourcePrinter), and those that deal genetically with api objects in internal format.  That confusion led to the two of us taking the same interfaces in two directions, compounded by the lack of tests for non-core API resources.

I think there is a use case for printing objects exactly as they are internally for debugging or admin use cases, although I don't see us exposing that any time soon.  It's uncommon enough that it shouldn't be easy to do (or other people will come in and accidentally do it).

The output version, the convertor, and the codec should all be passed down.  The default printer will continue to be provided by the factory (which allows consumers with their own resources to define their own printers).  I'll update and add some more tests to guard more of the weird paths and start adding more kubectl/cmd tests



> On Nov 18, 2014, at 6:26 PM, Daniel Smith <notifications@github.com> wrote:
> 
> In pkg/kubectl/cmd/get.go:
> 
> >  				checkErr(err)
> >  
> > -				w, err := restHelper.Watch(namespace, rv, labelSelector, labels.Set{}.AsSelector())
> > -				checkErr(err)
> > +				if versioned {
> > +					w = watch.Filter(w, func(in watch.Event) (out watch.Event, keep bool) {
> > +						obj, err := mapping.ObjectConvertor.ConvertToVersion(in.Object, outputVersion)
> I'm OK with injecting a function into printer creation. I guess it's a bit more flexible than injecting an api.Scheme.
> 
> —
> Reply to this email directly or view it on GitHub.
>