Make bin() implementation parallel oct() and hex() so that int/long subclasses can override or so that other classes can support.
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index e18eb2a..7647523 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -211,7 +211,24 @@
 static PyObject *
 builtin_bin(PyObject *self, PyObject *v)
 {
-        return PyNumber_ToBase(v, 2);
+	PyNumberMethods *nb;
+	PyObject *res;
+
+	if ((nb = v->ob_type->tp_as_number) == NULL ||
+	    nb->nb_hex == NULL) {
+		PyErr_SetString(PyExc_TypeError,
+			   "bin() argument can't be converted to hex");
+		return NULL;
+	}
+	res = (*nb->nb_bin)(v);
+	if (res && !PyString_Check(res)) {
+		PyErr_Format(PyExc_TypeError,
+			     "__bin__ returned non-string (type %.200s)",
+			     res->ob_type->tp_name);
+		Py_DECREF(res);
+		return NULL;
+	}
+	return res;
 }
 
 PyDoc_STRVAR(bin_doc,