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
Might be a little easier/shorter to just call this `controller` (doesn't enormously matter though, can always rename it on import)