Slightly change semantics of (^) on QuantHashes
Slightly change semantics of (^) on QuantHashes

If the left-hand side of the (^) (also known as ⊖) is mutable, then the
resulting QuantHash object will also be mutable.  If it is immutable,
it will stay immutable as before.

This should allow us to better optimize things like:

    my %h is BagHash = a => 42, b => 666;
    my %i is Bag = b => 13, c => 22;
    %h (^)= %i;

This requires quite a few spectest changes.  But all of these tests where
added after Christmas, so we should be good in that respect.

Instigated by https://stackoverflow.com/questions/51580534/does-baggy-add-work-on-mixhash-weights

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