Better diagnostics for failing tests in send-recv.t
Avoid producing invalid references

Before this change, we'd sometimes create references like this:

  SV = PVIV(0xa2eb88) at 0xcc5c40
    REFCNT = 1
    FLAGS = (PADMY,ROK)
    IV = 0
    RV = 0xdc1108
      SV = PVMG(0xd340e8) at 0xdc1108
        REFCNT = 1
        FLAGS = (OBJECT,RMG,POK,READONLY,pPOK)
        IV = 0
        NV = 0
        PV = 0xda88a0 "Hi there"
        CUR = 8
        LEN = 0
        MAGIC = 0xda14f8
          MG_VIRTUAL = 0x7ffff67c3c60
          MG_TYPE = PERL_MAGIC_ext(~)
          MG_FLAGS = 0x10
            DUP
          MG_PTR = 0xda8858 ""
        STASH = 0xcfdc38 "NanoMsg::Raw::Message"
    PV = 0xdc1108 "\350@\323\0\0\0\0\0"
    CUR = 8
    LEN = 16

Note how RV and PV point to the same location in memory (they're stored in the
same place within the SV union), as well as LEN being set, which indicates to a
lot of places that the PV is a malloc()ed buffer.

Due to the lack of a proper API to prepare any scalar to be used as a reference,
we'll have to do a few things manually to be able to get a valid RV. Some of
this code is taken from pp_undef.

This solution is probably still imperfect and will need some tweaking as wel
discover other values we can't yet upgrade into valid references.