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.
Please note that this is required due to the fact that pods aren't updated in storage to stay in sync with container states, so the only way to get events for container state updates right now is to poll. To retain queue semantics, we're populating the FIFO with a cache.Poller.