Master waits on slave setup completion

The master no longer sends subjobs immediately after triggering build
setup on the slave. The slave now executes build setup, then notifies
the master of whether setup was successful or not. If successful, then
the master starts sending subjobs to the slave.

If setup failed, currently the master will tell the slave to shut down
but we'll change this in a future commit to just reset the slave.

As part of this change, I also refactored how the slave sends "idle"
and "disconnect" notifications to the master. Previously "idle" and
"disconnect" were their own API endpoints. Now the slave does a PUT
on a slave state field. This, besides being more "restful", is more
extensible if we want to add more state notifications in the future.

This change fixes a bug where if build setup failed on the slave, the
slave would shut down completely. (This is actually still the behavior,
but now it is more explicit and we can easily change the behavior in a
future commit.)
Returning this 400 error to the slave will still cause the slave to shut down. In a future commit, we'll just tell the slave to do teardown and reset itself so that we can use it for another build.