Revert "fix System::Command to run in environments that mess with STDIN/STDOUT/STDERR"

This reverts commit d5009728cc66e5f9bb2057df4be70648571a29cd.

That commit actually reintroduced the bug with copying the standard
handles that was fixed by 7834ef6a1cf07598baad974d960f598beb54e2cb.

Test::Output was not installed on my environment, so the t/90-output.t
test that exposed the bug was not run. :-(
test that we can catch exec() problems

(like when running a command that does not exist)

Commit 220609b9a184f81074364d11e0274b2081cd65e2 that added some level
of support for Win32 also re-introduced a bug that was hiding open3()
exceptions and was fixed in f19b83b5228bc6746879e0b52a7acbfe4fc82672.
fix _spawn to work under Plack

This is a complete rewrite, doing only the minimum work necessary.

Takes inspiration from IPC::Open3 and Sys::Cmd, and basically does
what any fork+exec process must do:
- create pipes for communicating with the child
- fork a child
- close unneeded pipes in both process
- redirect the child's standard handles to the pipes
- exec the actual command ot be run

This fixes the Unix version to work correctly under Plack.

Further testing of the IPC::Run version for Win32 with Plack is probably
needed.
Merge branch 'plack'