child_process: handle ENOENT correctly on Windows

Fixes #4674

We were doing all kinds of crazy stuff on Windows when a developer tried to `child_process.spawn()` a non-existent process.

Now Windows works more like Posix. And passes the child-process unit tests that were previously failing. And we still pass the unit tests on Posix as well.