I think it's not.  The problem is that if the service is stopped in the middle of scheduling a build (e.g., while the `claimRequests` method is executing), then things can be left in disarray when the process exits.  This is particularly problematic for integration tests, where we expect the master's `stopService` to not return until all activity has ceased.

The *idea* was that calls to `maybeStartBuild` were serialized with a DeferredLock, so that this call would automatically block until any other pending calls had completed.  But it's not actually serialized, so I got that wrong :(