Refactor and test zvsh "run" workflow

Simplify and test the zvsh "run" workflow

This change adds an alternative implementation of the zvsh "run" workflow; see the function `zvshlib.zvsh.run_zerovm`. This function itself still needs tests, but most of the workflow including manifest & nvram file creation are well-tested.

As far as I can tell, this implementation is equivalent to the old one. I plan to follow this patch up by updating the `gdb` path to use the new code. Finally, I'll remove all of the unused old code (such as the `ZvShell` class.)

This pull partially addresses https://github.com/zerovm/zerovm-cli/issues/10. This issue still exists when the `gdb` option is specified.