Yes, in this case it seemed to make sense to block the caller until the start is complete.

I went ahead and changed the start and shutdown signatures to be `Promise<Boolean>` so we can `Assert.notNull` the result, which should tell us the start timed out without completing. If there's an error, we'll still get an exception when `Promise.get()` is called.