Memory leak in Storable::dclone with STORABLE_freeze hook

Storable documentation recommends using dclone shortcut in
STORABLE_freeze hook: "Unless you know better, serializing hook should
always say:
                sub STORABLE_freeze {
                    my ($self, $cloning) = @_;
                    return if $cloning; # Regular default serialization
                    ....
                }

            in order to keep reasonable dclone() semantics."

However, this causes a memory leak which is easy to observe with the
following small script:

=== storable-leak.plx ===
use Storable qw( dclone );

package Foo {
     sub new { return bless {}, __PACKAGE__ }

     sub STORABLE_freeze {
         my( $self, $cloning ) = @_;
         # Switch to regular default serialization results in memory leak
         return if $cloning;
         return 'Foo';
     }
}

my $d = Foo->new();
while(1)
{
     dclone( $d );
}
===

The leak is caused by missing cleanup of empty array value returned by
the hook. I've attached a simple patch for Storable-2.45 which fixes
this issue.

Reported in [perl #121928]

Amended to include version bump and Storable changelog entry.
refactor pp_list

-move PL_stack_sp and PL_stack_base reads into the branch in which they
 are used, this also removes 1 var from being saved across the function
 call in GIMME, which removes saving and restoring 1 non-vol register
-write SP to PL_stack_sp (PUTBACK) only if it was changed
-POPMARK is mutable, it must execute on all branches

this reduced pp_list's machine code size of the function from 0x58 to
0x53 bytes on VC 2003 -01 32 bits
For ptr masking use PTRSIZE-1, not nested conditional statement.
Accessing array before its start is dubious.

Fix by petermartini.

Fix for Coverity perl5 CID 28909:
Out-of-bounds access (ARRAY_VS_SINGLETON)
ptr_arith: Using &unsliced_keysv as an array.
This might corrupt or misinterpret adjacent memory locations.
Avoid "unused sp" if EXTEND is the last mentioning sp.

Add PERL_UNUSED_VAR(sp) in case the EXTEND (or MEXTEND)
is the last thing mentioning the sp.

Addresses Coverity perl5 CIDs 29199..29201, 29204, 29205, 29206,
29208, 29210, 29212, 29213, 29215, 29216, 29219..29221.
Add PERL_UNUSED_RESULT() and use that instead of the V_Gconvert().