Make MixHash iterators more safe
Make MixHash iterators more safe

Currently, deleting a key from a nqp::iterator of an nqp::hash and then
continuing iterating over the hash, may cause segfaults.  Prevent that
situation by letting the MixHash.kv/pairs/values methods run on an iterator
on a pre-made list of keys, rather than directly on the nqp::hash iterator.

Deleting can happen if the value of a key from a MixHash is set to 0:

    my %m is MixHash = <a b b c c c>
    dd %m;  # ("b"=>2,"c"=>3,"a"=>1).MixHash
    $_ = 0 for %m.values;
    dd %m;  # ().MixHash

MasterDuke17/rakudo,labster/rakudo,tony-o/rakudo,nbrown/rakudo,softmoth/rakudo,rakudo/rakudo,MasterDuke17/rakudo,tony-o/rakudo,MasterDuke17/rakudo,tony-o/rakudo,salortiz/rakudo,salortiz/rakudo,rakudo/rakudo,MasterDuke17/rakudo,Gnouc/rakudo,nbrown/rakudo,tony-o/rakudo,nbrown/rakudo,tony-o/rakudo,Gnouc/rakudo,Gnouc/rakudo,labster/rakudo,salortiz/rakudo,tony-o/rakudo,tbrowder/rakudo,rakudo/rakudo,softmoth/rakudo,softmoth/rakudo,labster/rakudo,rakudo/rakudo,salortiz/rakudo,salortiz/rakudo,softmoth/rakudo,salortiz/rakudo,rakudo/rakudo,tbrowder/rakudo,nbrown/rakudo,nbrown/rakudo,softmoth/rakudo,tbrowder/rakudo,MasterDuke17/rakudo,nbrown/rakudo,tbrowder/rakudo,Gnouc/rakudo,tbrowder/rakudo,labster/rakudo,Gnouc/rakudo,labster/rakudo,MasterDuke17/rakudo,Gnouc/rakudo,tbrowder/rakudo,rakudo/rakudo,labster/rakudo