implement draining of in-flight builds

* split builder further into Start, Attach, Complete
* Scheduler Drain() allows interruption of builds in Attach stage (running),
  but waits for Starting and Completing builds to finish

also, switch to ifrit for main.go
implement snapshotting