Make client.Request/RESTClient more testable and fakeable

Will allow kubectl to be more thoroughly tested in #2000