process: fix mistaken close of child stdin in some cases

If a parent process calls close(0), and then calls `uv_spawn`,
the following will happen:

  - the first call to socketpair() will return a pair like [0,14]
    in the parent. The kernel allocates fd=0 since it's the lowest
    free file descriptor.
  - the child, after fork, in uv__process_child_init,
    calls dup2(use_fd=14,fd=0), which is fine.
  - the child then calls close(close_fd=0), which is wrong.

This problem is easily solved by closing the close_fd first, and then
calling dup2 as before.

However, we can only close(0) in the child via close, since uv__close(0)
would assert false since fd < 3. I'm not sure if this is ideal.