add a builder abstraction

Add a builder abstraction, to:

- batch up resource change events for a workspace
- start a (potentially) long running build job, w/ user progress
- invoke any contributed builders in the build job, with the information about the workspace changes

@keertip for review