Reap external runner procs if they have timed out.
Proper teardown of receiver socket when external runner is not in slave mode.
Fix termination of external runners with duration.
Tighter control over respawning for duration-based external runs.

Prior to this commit, the ExternalRunner kept a reference to all subprocs
it had ever spawned.  When re-spawning to continue a duration-based test,
it would spawn a new proc for every item in this list, leading to an
exponential increase in the number of active processes.

With this commit, it now keeps references to only those subprocs that are
currently active, and only re-spawns processes that have terminated since
the previous check.  This should make it much better behaved for long-running
duration-based tests.
Merge pull request #139 from mozilla-services/fix-external-runner-respawning

Fix external runner respawning