A patch from Kevin Jacobs, plugging several leaks discovered when
running the sandbox datetime tests.

Bugfix candidate.
diff --git a/Modules/cPickle.c b/Modules/cPickle.c
index 32fdd6e..b83e765 100644
--- a/Modules/cPickle.c
+++ b/Modules/cPickle.c
@@ -225,10 +225,6 @@
 	return r;
 }
 
-#define PDATA_APPEND_(D,O,ER) { \
-  if (Pdata_Append(((Pdata*)(D)), O) < 0) return ER; \
-}
-
 #define PDATA_APPEND(D,O,ER) {                                 \
     if (((Pdata*)(D))->length == ((Pdata*)(D))->size &&        \
         Pdata_grow((Pdata*)(D)) < 0)                           \
@@ -897,6 +893,7 @@
 		if (key == NULL)
 			return 0;
 		if (PyDict_GetItem(self->fast_memo, key)) {
+			Py_DECREF(key);
 			PyErr_Format(PyExc_ValueError,
 				     "fast mode: can't pickle cyclic objects including object type %s at %p",
 				     obj->ob_type->tp_name, obj);
@@ -904,9 +901,11 @@
 			return 0;
 		}
 		if (PyDict_SetItem(self->fast_memo, key, Py_None) < 0) {
+			Py_DECREF(key);
 			self->fast_container = -1;
 			return 0;
 		}
+		Py_DECREF(key);
 	}
 	return 1;
 }
@@ -919,8 +918,10 @@
 		if (key == NULL)
 			return 0;
 		if (PyDict_DelItem(self->fast_memo, key) < 0) {
+			Py_DECREF(key);
 			return 0;
 		}
+		Py_DECREF(key);
 	}
 	return 1;
 }
@@ -3115,6 +3116,7 @@
 			Py_XDECREF(safe);
 			return NULL;
 		}
+		Py_DECREF(safe);
 	}
 
 	if (args==Py_None) {
@@ -3218,7 +3220,10 @@
 	if (!module_name)  return -1;
 
 	if ((len = (*self->readline_func)(self, &s)) >= 0) {
-		if (len < 2) return bad_readline();
+		if (len < 2) {
+			Py_DECREF(module_name);
+			return bad_readline();
+		}
 		if ((class_name = PyString_FromStringAndSize(s, len - 1))) {
 			class = find_class(module_name, class_name, 
 					   self->find_class);