Rewrite of the zerovm execution code

The previous implementation of this rewrite was broken in many ways, and thus was disabled/reverted.

This implementation should fix all of those issues, but since there were no baseline tests in place to very functionality, please test this thoroughly by hand to ensure that all use cases are working properly.

In the initial rewrite, many things didn't work properly. The fixes with this change include:

- 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` works now

Sorry for the code bomb. Things got a little "bulldozer-y".