Add functions PyUnicode_Append() and PyUnicode_AppendAndDel() that mirror
PyString_Concat() and PyString_ConcatAndDel() (the name PyUnicode_Concat()
was already taken).

Change PyObject_Repr() to always return a unicode object.

Update all repr implementations to return unicode objects.

Add a function PyObject_ReprStr8() that calls PyObject_Repr() and converts
the result to an 8bit string.

Use PyObject_ReprStr8() where using PyObject_Repr() can't be done
straightforward.
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index e195450..7c8e2b2 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -406,7 +406,7 @@
 		PyObject *ret = NULL;
 		PyObject *name = PyUnicode_AsUnicodeEscapeString(f->f_name);
 		const char *name_str = name ? PyString_AsString(name) : "?";
-		ret = PyString_FromFormat("<%s file u'%s', mode '%s' at %p>",
+		ret = PyUnicode_FromFormat("<%s file u'%s', mode '%s' at %p>",
 				   f->f_fp == NULL ? "closed" : "open",
 				   name_str,
 				   PyString_AsString(f->f_mode),
@@ -414,7 +414,7 @@
 		Py_XDECREF(name);
 		return ret;
 	} else {
-		return PyString_FromFormat("<%s file '%s', mode '%s' at %p>",
+		return PyUnicode_FromFormat("<%s file '%s', mode '%s' at %p>",
 				   f->f_fp == NULL ? "closed" : "open",
 				   PyString_AsString(f->f_name),
 				   PyString_AsString(f->f_mode),
@@ -2142,7 +2142,7 @@
                         value = PyObject_Str(v);
 	}
         else
-		value = PyObject_Repr(v);
+		value = PyObject_ReprStr8(v);
 	if (value == NULL) {
 		Py_DECREF(writer);
 		return -1;