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
It is a bit confusing to name the variable `buildPackage` when it refers to `BuildPackageOptions`.  Generally, it is considered idiomatic to name the options struct after the function it is being passed to.  So here it might be named `InvokeBuildOptions`, and `BuildPackageOptions` would be passed to a function named `BuildPackage`.  However, here it doesn't really seem to refer to options but rather the build package itself.  Therefore, it might make more sense to rename the type to `BuildPackage`.  That would be consistent with how it's used elsewhere in the code.