Fix SF bug #557436, TclError is a str should be an Exception

Make Tkinter.TclError derive from Exception, it was a string.
diff --git a/Misc/NEWS b/Misc/NEWS
index 7275ad4..2004456 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -124,6 +124,10 @@
 
 Library
 
+- Stop using strings for exceptions.  String objects used for exceptions
+  now derive from Exception.  The objects changed were: Tkinter.TclError,
+  bdb.BdbQuit, macpath.norm_error, tabnanny.NannyNag, and xdrlib.Error.
+
 - Constants BOM_UTF8, BOM_UTF16, BOM_UTF16_LE, BOM_UTF16_BE,
   BOM_UTF32, BOM_UTF32_LE and BOM_UTF32_BE that represent the Byte
   Order Mark in UTF-8, UTF-16 and UTF-32 encodings for little and
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index d155e77..788177f 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -2123,7 +2123,7 @@
 	m = Py_InitModule("_tkinter", moduleMethods);
 
 	d = PyModule_GetDict(m);
-	Tkinter_TclError = Py_BuildValue("s", "TclError");
+	Tkinter_TclError = PyErr_NewException("_tkinter.TclError", NULL, NULL);
 	PyDict_SetItemString(d, "TclError", Tkinter_TclError);
 
 	ins_long(d, "READABLE", TCL_READABLE);