Get rid of dict.has_key(). Boy this has a lot of repercussions!
Not all code has been fixed yet; this is just a checkpoint...
The C API still has PyDict_HasKey() and _HasKeyString(); not sure
if I want to change those just yet.
diff --git a/Objects/descrobject.c b/Objects/descrobject.c
index 914b6d3..d6b789d 100644
--- a/Objects/descrobject.c
+++ b/Objects/descrobject.c
@@ -701,15 +701,6 @@
 };
 
 static PyObject *
-proxy_has_key(proxyobject *pp, PyObject *key)
-{
-	int res = PyDict_Contains(pp->dict, key);
-	if (res < 0)
-		return NULL;
-	return PyBool_FromLong(res);
-}
-
-static PyObject *
 proxy_get(proxyobject *pp, PyObject *args)
 {
 	PyObject *key, *def = Py_None;
@@ -761,10 +752,8 @@
 }
 
 static PyMethodDef proxy_methods[] = {
-	{"has_key",   (PyCFunction)proxy_has_key,    METH_O,
-	 PyDoc_STR("D.has_key(k) -> True if D has a key k, else False")},
 	{"get",       (PyCFunction)proxy_get,        METH_VARARGS,
-	 PyDoc_STR("D.get(k[,d]) -> D[k] if D.has_key(k), else d."
+	 PyDoc_STR("D.get(k[,d]) -> D[k] if k in D, else d."
 	 				"  d defaults to None.")},
 	{"keys",      (PyCFunction)proxy_keys,       METH_NOARGS,
 	 PyDoc_STR("D.keys() -> list of D's keys")},
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index f4c185d..b3fdbf1 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -1621,7 +1621,7 @@
  }
 
 static PyObject *
-dict_has_key(register dictobject *mp, PyObject *key)
+dict_contains(register dictobject *mp, PyObject *key)
 {
 	long hash;
 	dictentry *ep;
@@ -1856,9 +1856,6 @@
 }
 
 
-PyDoc_STRVAR(has_key__doc__,
-"D.has_key(k) -> True if D has a key k, else False");
-
 PyDoc_STRVAR(contains__doc__,
 "D.__contains__(k) -> True if D has a key k, else False");
 
@@ -1911,12 +1908,10 @@
 "D.iteritems() -> an iterator over the (key, value) items of D");
 
 static PyMethodDef mapp_methods[] = {
-	{"__contains__",(PyCFunction)dict_has_key,      METH_O | METH_COEXIST,
+	{"__contains__",(PyCFunction)dict_contains,     METH_O | METH_COEXIST,
 	 contains__doc__},
 	{"__getitem__", (PyCFunction)dict_subscript,	METH_O | METH_COEXIST,
 	 getitem__doc__},
-	{"has_key",	(PyCFunction)dict_has_key,      METH_O,
-	 has_key__doc__},
 	{"get",         (PyCFunction)dict_get,          METH_VARARGS,
 	 get__doc__},
 	{"setdefault",  (PyCFunction)dict_setdefault,   METH_VARARGS,
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 7b15925..02d45bd 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -4432,7 +4432,6 @@
 	}
 
 	if (func == NULL) {
-		PyErr_Clear();
 		PyErr_Format(PyExc_TypeError, "unhashable type: '%.200s'",
 			     self->ob_type->tp_name);
 		return -1;