Build steps should retry if the slave is lost

If the slave is lost, it's not a failure of buildbot or the build
running, so we should just retry the job.  A bunch of the source
control steps already did this as well as `LoggingBuildstep`, but
this change centralizes all that logic into `Buildslave`.  All a
consumer has to do is add `Buildstep.failed` as an error handler and
everything will just work.

Since this is fixed in master, but broken on 0.8.8 for source control,
this change adds explicit tests to ensure that this isn't broken in the
future as well (since these tests were not added when the fix was added
originally).