zvsh: don't nuke working dirs when saving rt files

If the user specifies a save dir for the runtime files (manifest,
nvram, etc.), don't nuke the entire directory! The original intention of
this was to ensure that the runtime files do not overwrite existing
files, but this is a destructive approach (and could result in the some
serious damage to the user's system). When I first encountered this bug,
I lost an entire git clone directory; luckily it was backed up a remote
repo, but I hope the risk here is clear.

So instead of nuking the directory, this change simply checks if the
runtime files we expect to create (nvram.1, manifest.1, etc.) exist. If
any exist, we halt. Otherwise, we continue writing to the target save
directory, whether it is empty or not.

The behavior when no save dir is specified does not change; we still
will create and cleanup a tempdir in this case.
Merge pull request #37 from larsbutler/dont-nuke-working-dirs

zvsh: don't nuke working dirs when saving rt files
zvsh: rewrite the `run_zerovm` function

This is pretty much a complete rewrite of the `run_zerovm` function and
subordinate utilities/classes. The previous implementation was broken
and wrong, and didn't support zvsh execution with a single nexe.

Below are the major features which didn't work properly and should be
fixed now:

    - proper handling for the cases when std{in,out,err} are ttys/not
      ttys, are files/pipes, etc.
    - propagation of config file read/write limits to channel creation
    - propagation of zvsh.cfg [fstab] configuration (for "default"
      images)
    - propagation of zvsh.cfg [env] settings
    - environment var handling, from the command line (with the @FOO=bar
      syntax) and zvsh.cfg
    - executing a bare nexe in the manner of `zvsh foo.nexe` (and not
      just from an image, in the manner of python) works now
tests/zvsh_test: rewrite/add to `run_zerovm` tests

This change rewrites a lot of tests which were exercising the previous
(broken) functionality for the `run_zerovm` code.

Test coverage is now sitting at a whopping 45%!
zvsh: switch to the new `run_zerovm` function

This only applies to normal run cases for zvsh. It does not apply to the
gdb case (which still needs to be rewritten using the new tested
implementation).