Initial functional checkin of the controller

Note: This does not yet handle artifacts, nor the logs from the builder-core, as we don't yet have those interfaces exposed
Using the `zip` package requires reimplementing how to read a zip into a directory (or stream) and do so recursively. Rewriting that code is fraught with errors. Using the docker archive package for tar handling is doable, but we'd still need to have the other package in place for handling zip, so it is a toss up as to whether it is worth the extra code paths