PEP 352 implementation.  Creates a new base class, BaseException, which has an
added message attribute compared to the previous version of Exception.  It is
also a new-style class, making all exceptions now new-style.  KeyboardInterrupt
and SystemExit inherit from BaseException directly.  String exceptions now
raise DeprecationWarning.

Applies patch 1104669, and closes bugs 1012952 and 518846.
diff --git a/Objects/genobject.c b/Objects/genobject.c
index 8b84e2e..c24c3ce 100644
--- a/Objects/genobject.c
+++ b/Objects/genobject.c
@@ -230,11 +230,11 @@
 	Py_XINCREF(val);
 	Py_XINCREF(tb);
 
-	if (PyClass_Check(typ)) {
+	if (PyExceptionClass_Check(typ)) {
 		PyErr_NormalizeException(&typ, &val, &tb);
 	}
 
-	else if (PyInstance_Check(typ)) {
+	else if (PyExceptionInstance_Check(typ)) {
 		/* Raising an instance.  The value should be a dummy. */
 		if (val && val != Py_None) {
 			PyErr_SetString(PyExc_TypeError,
@@ -245,7 +245,7 @@
 			/* Normalize to raise <class>, <instance> */
 			Py_XDECREF(val);
 			val = typ;
-			typ = (PyObject*) ((PyInstanceObject*)typ)->in_class;
+			typ = PyExceptionInstance_Class(typ);
 			Py_INCREF(typ);
 		}
 	}