MoarVM's open op does not handle writing to a pipe (openpipe does), but nqp-p
does not have openpipe. Since it is hard to conditionally use compile ops I
switched to using shell(), which just means that we have to write the C file
This is needed because open() thinks the CC we invoke sits in our CWD.
Since this is not the case and it is hard to figure out where a binary
is (especially on windows), we need re-implement 95% of open's magic.