eval: Simpler IO handling.

Also, fdIO -> fileIO
eval: Regard nil IO as closing as well
eval: Use a channel of StateUpdate to keep track of command states.

This is more generic than returning pids, and is suitable for builtins.