The mutators weren't being tested so we only had to assume that they
were doing the right thing. In my own tests I saw a lot of input that
had NUL bytes in it, so I'm pretty sure that some of the mutations were
not doing the right thing. With these tests, the copy method was found
to have poorly named parameters.

The pattern it's using is copy(a, b, posa, posb, lena, lenb) (where lena
and lenb can be omitted). The 'a' parameter is where the update will
take place, and the 'b' parameter is where the copy originates. However,
the first parameter was called 'src' and the second parameter 'dst',
which is the precise opposite of the expectation. The naming of the
parameters was kept consistent (a named as src, despite being the
destination) with the other named parameters and within the function.

This has been corrected, and with the correct naming, it became obvious
that the insert, remove and duplicate functions were not working as
intended.

It is unclear what the difference is intended to be for Duplicate and
Copy bytes - I have 'fixed' Duplicate, but this means that it now works
identically to Copy, so it's not clear to me what's meant to be done
there.