Do more robust test of whether global objects are accessible.

PyImport_ImportModule() is not guaranteed to return a module object.
When another type of object was returned, the PyModule_GetDict() call
return NULL and the subsequent GetItem() seg faulted.

Bug fix candidate.
diff --git a/Modules/cPickle.c b/Modules/cPickle.c
index 2484365..84c1d4f 100644
--- a/Modules/cPickle.c
+++ b/Modules/cPickle.c
@@ -1719,10 +1719,7 @@
 				  "OSS", args, module, global_name);
 		goto finally;
 	}
-	/* borrowed ref */
-	moddict = PyModule_GetDict(mod);        
-	/* borrowed ref */
-	klass = PyDict_GetItemString(moddict, name_str);        
+	klass = PyObject_GetAttrString(mod, name_str);
 	if (klass == NULL) {
 		cPickle_ErrFormat(PicklingError,
 				  "Can't pickle %s: it's not found as %s.%s",
@@ -1730,11 +1727,13 @@
 		goto finally;
 	}
 	if (klass != args) {
+		Py_DECREF(klass);
 		cPickle_ErrFormat(PicklingError,
 				  "Can't pickle %s: it's not the same object as %s.%s",
 				  "OSS", args, module, global_name);
 		goto finally;
 	}
+	Py_DECREF(klass);
 
 	if ((*self->write_func)(self, &global, 1) < 0)
 		goto finally;