Diskfree.pm: fix df handle leak

This left a zombied "df" process in the process table.  The Perl
runtime eventually cleaned it up, but it was weird to see a zombied df
in ps listings.

There's no point in reporting this bug upstream; according to the
Changes file, v0.06 was published in 1998.  There's been no activity
on http://search.cpan.org/dist/Filesys-DiskFree/DiskFree.pm since
v0.06.
DoCommand: remove unused variables
DoCommand: ensure to only kill the process once

When the DoCommand timeout fires, MTT will kill the entire process
tree of the launched command.  However, the stdout/stderr sockets may
still be draining, and therefore the main DoCommand loop may still
execute more iterations.  In cases like these, ensure that we don't
try to backtrace/kill the process tree again.

Also add a few more Debug statements for detailed output.
DoCommand: replace obscure perl code with easier-to-grok version

The descendant_processes() and flatten() codes were written in a
nicely efficient yet very difficult to understand manner.  This commit
replaces these two subs with admittedly less efficient but much easier
to understand code.

The new code also saves the first token of the command for each PID so
that it can be used in Debug/Verbose statements (e.g., identify the
command that is being killed, etc.).
DoCommand: several fixes to kill_proc logic

1. Fix the kill(0, $pid) test to see if the process was still alive.

2. Rename _kill_proc() to _kill_proc_tree() to indicate that it's
really killing not only the PID in question, but also all of its
descendants.

3. In _kill_proc_tree(), change the order to kill the main PID first,
and ''then'' kill all the descendants.

The main use case is when killing mpirun: if we kill mpirun's
descendants ''first'', mpirun will detect its childrens' deaths and
then cleanup and exit.  Later, when MTT finally gets around to killing
mpirun, MTT will detect that mpirun is already dead and therefore emit
a confusing "mpirun died right at end of timeout" message.  This is
misleading at best; it doesn't indicate what actually happened.

However, if we kill mpirun first, it will take care of killing all of
its descendants.  MTT will therefore emit the right messages about
killing mpirun.  MTT will then redundantly try to kill a bunch of
now-nonexistent descendant processes of mpirun, but that's ok/safe.
We actually ''want'' this try-to-kill-mpirun's-descendants behavior to
handle the case when mpirun is misbehaving / not cleaning up its
descendants.

4. DoCommand() is used for more than launching mpirun, so pass down
$argv0 so that we can print the actual command name that is being
killed in various Verbose/Debug messages, not the hard-coded "mpirun"
string (which, in practice, was probably almost always correct, but
still...).