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
Not quite what I mean - in this code, you're first extracting the body bytes into a temporary file on disk, then unarchiving that temporary file into a temporary directory.  I'm suggesting that you skip the first step and go right from body bytes to unarchived contents in a directory.  Something like this:

```go
// warning: untested
if err := archive.Untar(body, tempDirectory, &archive.TarOptions{Compression: archive.Gzip}); err != nil {
  // handle error
}
```