Use `os.execvpe` with `run`, fix `shell`

Use `exec` to replace the envdir process with the child process (fixes #20).

This commit also fixes `(env)shell` to behave properly when `Ctrl-C` is
pressed in the subprocess (apparently caused by using os.setsid).
rewrite the tests to mock os.execvpe to avoid replacing the test runner process
Merge pull request #30 from ticosax/use-os-exec

Use os exec