Possibly the end of SF [#460020] bug or feature: unicode() and subclasses.
Changed unicode(i) to return a true Unicode object when i is an instance of
a unicode subclass.  Added PyUnicode_CheckExact macro.
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 98691fd..a50b925 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -425,12 +425,20 @@
     }
     if (PyUnicode_Check(obj)) {
 	if (encoding) {
-	    PyErr_SetString(PyExc_TypeError,
+            PyErr_SetString(PyExc_TypeError,
 			    "decoding Unicode is not supported");
-	    return NULL;
+            return NULL;
 	}
-	Py_INCREF(obj);
-	v = obj;
+        if (PyUnicode_CheckExact(obj)) {
+	    Py_INCREF(obj);
+            v = obj;
+	}
+        else {
+            /* For a subclass of unicode, return a true unicode object
+               with the same string value. */
+            v = PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(obj),
+                                      PyUnicode_GET_SIZE(obj));
+        }
 	goto done;
     }
     else if (PyString_Check(obj)) {