Refactor and test zvsh "run" workflow, part 2

This change adds support for a missing case (mentioned in https://github.com/zerovm/zerovm-cli/issues/21). The case where zvsh is run with just a single nexe was not supported.

Test coverage also increases slightly, from 37% to ~40%.

TODO: I want to eventually port the `gdb` execution path to the new code, and then we can remove a bunch of untested stuff (like the `ZvShell` class).