Track SVs for destruction when -DPURIFY
This patch removes a few obvious redundancies in the source.
This patch changes neither behavior nor performance. However, it does
reduce code size and improve maintainability by combining some common
code in gv_fullname() and gv_efullname().
When checking for memory leaks, I compiled Perl with "-DPURIFY".
Although that flag improves the leak checking, it also breaks
destruction of global objects, because SVs aren't kept in captive
arenas any more.
This patch rectifies the problem by providing an alternative
method for keeping track of SVs when Perl is compiled for Purify.
It has no effect on normal operation.
Add comment about assert(len >=0) when len is unsigned anyway.