Issue #6656: fix locale.format_string to handle escaped percents and mappings.

Refactors format_string.  Includes tests for the two problems noted in
the issue, but as far as I can see there are no other tests that confirm
that format_string conforms to normal % formatting rules.
diff --git a/Misc/NEWS b/Misc/NEWS
index db6ca01..77fc78f 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -27,6 +27,9 @@
 Library
 -------
 
+- Issue #6656: fix locale.format_string to handle escaped percents
+  and mappings.
+
 - Issue #2302: Fix a race condition in SocketServer.BaseServer.shutdown,
   where the method could block indefinitely if called just before the
   event loop started running.  This also fixes the occasional freezes