Use spawn opts with IO.popen

Now that we require at least 1.9.3, we should get to use all the new spawn goodies.

We should just be able to pass an array of commands into `IO.popen` and it handles all the escaping for us. Plus, it will invoke the command directly instead of spawning a dummy subshell.

I'm hoping this can improve Windows support as well, but more hoping not to make anything worse.

/cc @sstephenson @stereobooster @rubys @tenderlove