More changes to perllocale and POSIX.pod setlocale

These address some concerns from John Peacock.
lib/locale.t: Use hash keys instead of many arrays

This implementation detail allows easier handling of things as a whole.
We could save code by adding evals, but I'm trying to not add the added
complexity of evals to the tests here.
lib/locale.t: Display :punct: characters under debug mode

This class of characters was previously omitted
lib/locale.t: Change debug output

This combines the output so that all characters are shown in code point
order, with only ASCII alphanumerics displayed literally.  This is
clearer.
lib/locale.t: Display unassigned chars

This adds debug output to list the characters that aren't matched by any
posix class.
lib/locale.t: Add a bunch of tests

I looked through the online standard and added as many conformance tests
as I could think of.
Make printf, sprintf respect 'use locale' for radix

When called from outside the lexical scope of 'use locale', these now
always print a dot for the decimal point character.

This change is actually done in Perl_sv_vcatpvfn_flags, which is common
to many things, but the principal external effect that I could determine
is on printf and sprintf.

Without this change, unrelated code can change the locale, thus
affecting what an unsuspecting application prints.
lib/locale.t: Refactor some tests

The tests were to make sure that UTF-8 is returned when it should be.
This makes somewhat these somewhat cleaner