Simple but important optimization for descr_check(): instead of the
expensive and overly general PyObject_IsInstance(), call
PyObject_TypeCheck() which is a macro that often avoids a call, and if
it does make a call, calls the much more efficient PyType_IsSubtype().
This saved 6% on a benchmark for slot lookups.
diff --git a/Objects/descrobject.c b/Objects/descrobject.c
index cbf9e16..6daffc6 100644
--- a/Objects/descrobject.c
+++ b/Objects/descrobject.c
@@ -65,7 +65,7 @@
 		*pres = (PyObject *)descr;
 		return 1;
 	}
-	if (!PyObject_IsInstance(obj, (PyObject *)(descr->d_type))) {
+	if (!PyObject_TypeCheck(obj, descr->d_type)) {
 		PyErr_Format(PyExc_TypeError,
 			     "descriptor '%s' for '%s' objects "
 			     "doesn't apply to '%s' object",