cmd: Allow callers to override file-closing behaviour after fork.

This allows us to send file descriptors directly to child processes,
eg. using /dev/fd/<N>.
info: disk-format et al: Fix error message when no file exists (RHBZ#981663).

$ guestfish disk-format /etc/nosuchfile

Instead of this obscure double error message:

  libguestfs: error: qemu-img info: JSON parse error: parse error: premature EOF
                       (right here) ------^
  libguestfs: error: qemu-img info: /etc/nosuchfile: qemu-img info exited with error status 1.
  To see full error messages you may need to enable debugging.
  See http://libguestfs.org/guestfs-faq.1.html#debugging-libguestfs

You will now see this simpler error:

  libguestfs: error: disk info: /etc/nosuchfile: No such file or directory

Thanks: Bo Fan.
info: Fix double-call to error function when qemu-img info command fails (RHBZ#981663).

Previously if the 'qemu-img info --output json' command failed, then
the stdout callback would be called first with a zero-length buffer.
Since a zero-length buffer cannot be valid JSON (in this context)
don't produce a separate error message.

However do catch the case when qemu-img info might produce no output
and no error (if that were to happen -- it does not happen at the
moment).
tests: Add a regression test for all disk_* info commands (RHBZ#981663).