I represent a single command to be run on the slave. I handle the
details of reliably gathering status updates from the slave
(acknowledging each), and (eventually, in a future release) recovering
from interrupted builds. This is the master-side object that is known to
the slave-side buildbot.slave.bot.SlaveBuilder, to which status updates
are sent.

My command should be started by calling .run(), which returns a
Deferred that will fire when the command has finished, or will errback if
an exception is raised.

Typically __init__ or run() will set up self.remote_command to be a
string which corresponds to one of the SlaveCommands registered in the
buildslave, and self.args to a dictionary of arguments that will be
passed to the SlaveCommand instance.

start, remoteUpdate, and remoteComplete are available to be
overridden

the slave raised an exception while finishing the command (they send
back a remote_complete message with a Failure payload)

and also (for now):

slave disconnected while the command was running

This method should do cleanup, like closing log files. It should
normally return the 'failure' argument, so that any exceptions will be
propagated to the Step. If it wants to consume them, return None
instead.