TemporaryJobs: monitor jobs while running tests

Fail the test if a job fails during the test run. We do this by running
the actual test on a separate thread, while the main thread polls for
job status, throwing an AssertionError if they've failed.
TemporaryJobs: fix executor cleanup on job failure

* Run after() and before() on main thread instead of test thread.
* call after() in a finally to ensure that the executor is terminated.
restore lost newline
TemporaryJobs now honors the HELIOS_HOST_ADDRESS env var

HELIOS_HOST_ADDRESS is the IP address we should use to reach the host, instead of
the hostname. This is used when running a helios cluster inside a VM, and the containers
can be reached by IP address only, since DNS won't be able to resolve the host name of
the helios agent running in the VM.
Merge pull request #125 from spotify/rculbertson/temp-job-visible-ip

TemporaryJobs now honors the HELIOS_HOST_ADDRESS env var
Merge pull request #126 from spotify/dano/temporary-jobs-monitor

TemporaryJobs: monitor jobs while running tests
agent: poll instead of waiting for container exit

We're doing this poll loop instead of docker.waitContainer() because we
saw the agent hang forever on waitContainer after the socket got into a
weird half-open state where the kernel (netstat/lsof) would only show
one end of the connection and restarting docker would not close the
socket.

¯\_(ツ)_/¯
remove unused class