newSV() is faster than newSV_type(SVt_NULL)

I accidentally use newSV(SVt_NULL), which is the same
as newSV(0), instead of using newSV_type(SVt_NULL), and saw
a speedup around 5% in our benchmarks. Inspecting the code,
newSV() does not call sv_upgrade() when the length is 0,
whereas newSV_type() *always* calls sv_upgrade, even if the
type is SVt_NULL.

This can account for as much 5% speedup in the bench test.
cleanup/move define for HvRITER_set()
micro-optimisations in read_single_value_into_container().

This function is called to handle hash and array values. Meaning
it is hot, so anything we can remove from this helps.
unroll srl_read_single_value_into_container into srl_read_array()
refactor the alias logic for a 7% speedup

needs further testing and analysis
simplify/speedup readonly flag processing

This allows simpler logic to be used.
move depth book-keeping to array/hash/refn

This avoids per-item churn in things like arrays and hashes.
constify the decoder buffer logic