windows: make uv_spawn() failure more predictable

* It will now report some types of errors synchronously, to bring it on
  par with uv-unix. Fixes #865.

* Failure to find the target executable will now set up stdio pipes
  correctly, so the user can assume that when uv_spawn() returns 0 these
  pipes will never trigger asserts in libuv's guts.
process: make the 'status' parameter for exit_cb an int64_t

This means we no longer have to strip the high bit from the process exit
code on Windows, which is problematic because an unhandled SEH exception
can make a process exit with a status code that has the high bit set.