Add a bunch of GIL release/acquire points in tp_print implementations and for
PyObject_Print().

Closes issue #1164.
diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c
index f1e3aee..b85762a 100644
--- a/Objects/tupleobject.c
+++ b/Objects/tupleobject.c
@@ -188,16 +188,24 @@
 tupleprint(PyTupleObject *op, FILE *fp, int flags)
 {
 	Py_ssize_t i;
+	Py_BEGIN_ALLOW_THREADS
 	fprintf(fp, "(");
+	Py_END_ALLOW_THREADS
 	for (i = 0; i < Py_Size(op); i++) {
-		if (i > 0)
+		if (i > 0) {
+			Py_BEGIN_ALLOW_THREADS
 			fprintf(fp, ", ");
+			Py_END_ALLOW_THREADS
+		}
 		if (PyObject_Print(op->ob_item[i], fp, 0) != 0)
 			return -1;
 	}
-	if (Py_Size(op) == 1)
+	i = Py_Size(op);
+	Py_BEGIN_ALLOW_THREADS
+	if (i == 1)
 		fprintf(fp, ",");
 	fprintf(fp, ")");
+	Py_END_ALLOW_THREADS
 	return 0;
 }