Handle slave disconnections during build start better

This:
 - checks for a slave disconnection at the last possible moment
 - handles exceptions from startBuild's deferred better
 - treats errors in startBuild as EXCEPTION, not FAILURE

Fixes #2427.