add utility for binding flags and building api server clients

This utility provides one stop shopping for a command line executable to get bind the correct flags, build the client config, and create a working client.  The code for usage reduces to something like this:

	authLoader := &PromptingAuthLoader{os.Stdin}
	clientBuilder := clientcmd.NewClientBuilder(authLoader)
	clientBuilder.BindFlags(cmds.PersistentFlags())
	apiClient, err := clientBuilder.BuildClient()

I made the flags congruent with kubectl and used kubectl as an example spot for usage.  This makes use of the auth config work in #2340 and the Bind and Build approach could be used to unify client creation and flag names.

@smarterclayton You've had an interest in this area.
How much ripple out?  What you described doesn't sound like it's anything we want to keep separate anyway.


> On Nov 18, 2014, at 11:10 AM, David Eads <notifications@github.com> wrote:
> 
> In pkg/kubectl/cmd/proxy.go:
> 
> > @@ -32,7 +33,7 @@ func NewCmdProxy(out io.Writer) *cobra.Command {
> >  		Run: func(cmd *cobra.Command, args []string) {
> >  			port := GetFlagInt(cmd, "port")
> >  			glog.Infof("Starting to serve on localhost:%d", port)
> > -			server, err := kubectl.NewProxyServer(GetFlagString(cmd, "www"), GetKubeConfig(cmd), port)
> > +			server, err := kubectl.NewProxyServer(GetFlagString(cmd, "www"), getKubeConfig(clientBuilder), port)
> What does this need from getKubeConfig?
> 
> prefix, host, and transport. The clientcmd.Builder has a .BuildConfig method, but I didn't want to mess around with changing fatal (old code) versus error (new code) in this pull request. It ends up rippling out.
> 
> —
> Reply to this email directly or view it on GitHub.
>