Refactor build API and controller

Refactor the build API and validation. Refactor the build controller
to use the upstream cache package where possible. Use watches wherever
possible.
We can't prevent users from creating their own pods unfortunately.  We really only should be looking at pods that deterministically match the known builds that are not in complete state.

----- Original Message -----
> > +		NextBuild: func() *buildapi.Build {
> > +			return buildQueue.Pop().(*buildapi.Build)
> > +		},
> > +		NextPod: func() *kapi.Pod {
> > +			return podQueue.Pop().(*kapi.Pod)
> > +		},
> > +		BuildStrategy: &typeBasedFactoryStrategy{
> > +			DockerBuildStrategy: factory.DockerBuildStrategy,
> > +			STIBuildStrategy:    factory.STIBuildStrategy,
> > +		},
> > +	}
> > +}
> > +
> > +// pollPods lists all pods and returns an enumerator for cache.Poller.
> > +func (factory *BuildControllerFactory) pollPods() (cache.Enumerator,
> > error) {
> > +	list, err := factory.KubeClient.ListPods(kapi.NewContext(),
> > labels.Everything())
> 
> I expressed the same idea to @pmorie yesterday; if we can agree on a label to
> assign build pods, I can easily narrow the poll scope here. Add "build" to
> all pods?
> 
> ---
> Reply to this email directly or view it on GitHub:
> https://github.com/openshift/origin/pull/335/files#r19890333