Update to MvL's patch #424475 to avoid returning 2 when tp_compare
returns that.  (This fix is also by MvL; checkin it in because I want
to make more changes here.  I'm still not 100% satisfied -- see
comments attached to the patch.)
diff --git a/Objects/object.c b/Objects/object.c
index 0d9b3fe..e602159 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -580,8 +580,11 @@
 	cmpfunc f;
 
 	if (v->ob_type == w->ob_type
-	    && (f = v->ob_type->tp_compare) != NULL)
-		return (*f)(v, w);
+	    && (f = v->ob_type->tp_compare) != NULL) {
+		c = (*f)(v, w);
+		if (c != 2 || !PyInstance_Check(v))
+			return c;
+	}
 	c = try_rich_to_3way_compare(v, w);
 	if (c < 2)
 		return c;