Don't check for the maximum character when copying from unicodeobject.c

 * Create copy_characters() function which doesn't check for the maximum
   character in release mode
 * _PyUnicode_CheckConsistency() is no more static to be able to use it
   in _PyUnicode_FormatAdvanced() (in formatter_unicode.c)
 * _PyUnicode_CheckConsistency() checks the string hash
diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c
index c989d83..a389734 100644
--- a/Python/formatter_unicode.c
+++ b/Python/formatter_unicode.c
@@ -1284,33 +1284,31 @@
                           Py_ssize_t start, Py_ssize_t end)
 {
     InternalFormatSpec format;
-    PyObject *result = NULL;
+    PyObject *result;
 
     /* check for the special case of zero length format spec, make
        it equivalent to str(obj) */
-    if (start == end) {
-        result = PyObject_Str(obj);
-        goto done;
-    }
+    if (start == end)
+        return PyObject_Str(obj);
 
     /* parse the format_spec */
     if (!parse_internal_render_format_spec(format_spec, start, end,
                                            &format, 's', '<'))
-        goto done;
+        return NULL;
 
     /* type conversion? */
     switch (format.type) {
     case 's':
         /* no type conversion needed, already a string.  do the formatting */
         result = format_string_internal(obj, &format);
+        if (result != NULL)
+            assert(_PyUnicode_CheckConsistency(result, 1));
         break;
     default:
         /* unknown */
         unknown_presentation_type(format.type, obj->ob_type->tp_name);
-        goto done;
+        result = NULL;
     }
-
-done:
     return result;
 }