implement openpipe, hoelzro++
disable hacky :rp/:wp switch
openpipe spawns using a shell
disable ipc communication, this blows up on windows
use uv_process_close on windows (instead of waitpid)
Don't freak out if we close a pipe twice

This may or may not be a good idea; I'm just following
the standard set by the JVM implementation
Merge pull request #75 from hoelzro/wip-openpipe

Don't freak out if we close a pipe twice
Add a missing write barrier in OS settypecache.

If the result of MVM_repr_at_pos_o() is in the nursery, then a write
barrier is needed to ensure that the STable whose cache is being set
becomes correctly marked as a nursery root, and hence Object addresses
in the cache get updated.
Missing write barrier in setwho.
Missing write barrier in setboolspec.
Missing write barriers in invo-spec deserialize.
A few missing P6opaque REPR data write barriers.
Should not use REPR() on an STable.

The code was buggily assuming that every collectable was an Object when
checking to see if Objects referenced frames. Not all collectables are
Objects, but by chance of how Objects and STables are laid out in memory,
REPR() on an STable would give a pointer to a sufficienty valid Object
that the code didn't fail. However, a side effect of this was the code
ends up thinking that every STable is an Object that references frames,
and hence need to be tracked in gen2roots[]. This slows things down, and
concealed several bugs, fixed in previous commits.
In form_string_heap(), ensure that the padding bytes are initialised.

Whilst we never read this memory, it's useful to ensure it is initialised,
otherwise valgrind (and similar tools) will rightly complain that we're
writing garbage to disk.

With this change, compiling the setting runs without error under valgrind.
In process_worklist(), assert() that various assignments are unneeded.

Also assert that if the pointer is in to-space already, it is never marked as
gen2.
Re-order code in process_worklist() to avoid checking tospace for gen2 items.

Still run the sanity test for tospace even on items marked as gen2.
Mark gen2 as live using a flag bit instead of the forwarding pointer.

This means that the forwarding pointer is now only used on dead objects.
Use a flag to indicate which items in fromspace are live (during GC).
Some GC marking sanity check asserts.
Encapsulate SC access through MVM_sc_{get,set}_{stable,obj}_sc()

Ideally these would be inline functions.