Add custom op stuff
refactor shared code into srl_dump_data_structure_mortal_sv
add back the expect_true() wrappers

I removed them to debug a compiler warning about null arguments.
Perl: Stylistic refactoring of custom op code

Just making the style of the code more in line with the rest. It's no
better and no worse, just more similar to the rest.
[rt.cpan.org #93892] downgrade breaks unwritable strings

Arguably we should not downgrade the original string. This also removes
code duplication by moving this logic into srl_begin_decoding() right
before we copy the the string buffer into our private struct.

I wonder if we should warn when this happens. This change means that in
the case of a large buffer holding many sereal packets which is in utf8
will be decoded for each buffer. I guess people "should just not do that"
but I wonder if we should warn if we do...
fix [rt.cpan.org #93888] does not preserve special SV identity

Includes one failing test for SRL_HDR_UNDEF related to \do{my $x= undef}
which suggests we may have to undo the UNDEF part of this patch and live
with the fact that we dont round trip \undef properly, or we have to
patch the protocol to support it (boo)
followup for [rt.cpan.org #93888], leave SRL_HDR_UNDEF unchanged

SRL_HDR_UNDEF represents any undefined value. It does not represent
PL_sv_undef. For that we really need a new tag.
s/sereal_(decode|encode)(\w*)/sereal_encode${1}_op/g

Rename the functional/custom opcode interface to end with an _op suffix.
The whole encode_sereal/sereal_encode dichotomy is to likely to lead to
confusing. Adding a suffix makes it clearer what is going on.

My choice of suffix was more or less "_op" or "_func" I went with "_op".
add comments
Fix declaration after code error
whitespace changes for readability