Add optional docstrings to getset descriptors.  Fortunately, there's
no backwards compatibility to worry about, so I just pushed the
'closure' struct member to the back -- it's never used in the current
code base (I may eliminate it, but that's more work because the getter
and setter signatures would have to change.)

As examples, I added actual docstrings to the getset attributes of a
few types: file.closed, xxsubtype.spamdict.state.
diff --git a/Objects/descrobject.c b/Objects/descrobject.c
index dfbb3b6..7be1074 100644
--- a/Objects/descrobject.c
+++ b/Objects/descrobject.c
@@ -26,7 +26,7 @@
 
 typedef struct {
 	COMMON;
-	struct getsetlist *d_getset;
+	PyGetSetDef *d_getset;
 } PyGetSetDescrObject;
 
 typedef struct {
@@ -302,7 +302,7 @@
 	{0}
 };
 
-static struct getsetlist method_getset[] = {
+static PyGetSetDef method_getset[] = {
 	{"__doc__", (getter)method_get_doc},
 	{0}
 };
@@ -317,12 +317,27 @@
 	return PyString_FromString(descr->d_member->doc);
 }
 
-static struct getsetlist member_getset[] = {
+static PyGetSetDef member_getset[] = {
 	{"__doc__", (getter)member_get_doc},
 	{0}
 };
 
 static PyObject *
+getset_get_doc(PyGetSetDescrObject *descr, void *closure)
+{
+	if (descr->d_getset->doc == NULL) {
+		Py_INCREF(Py_None);
+		return Py_None;
+	}
+	return PyString_FromString(descr->d_getset->doc);
+}
+
+static PyGetSetDef getset_getset[] = {
+	{"__doc__", (getter)getset_get_doc},
+	{0}
+};
+
+static PyObject *
 wrapper_get_doc(PyWrapperDescrObject *descr, void *closure)
 {
 	if (descr->d_base->doc == NULL) {
@@ -332,7 +347,7 @@
 	return PyString_FromString(descr->d_base->doc);
 }
 
-static struct getsetlist wrapper_getset[] = {
+static PyGetSetDef wrapper_getset[] = {
 	{"__doc__", (getter)wrapper_get_doc},
 	{0}
 };
@@ -444,7 +459,7 @@
 	0,					/* tp_iternext */
 	0,					/* tp_methods */
 	descr_members,				/* tp_members */
-	0,					/* tp_getset */
+	getset_getset,				/* tp_getset */
 	0,					/* tp_base */
 	0,					/* tp_dict */
 	(descrgetfunc)getset_get,		/* tp_descr_get */
@@ -532,7 +547,7 @@
 }
 
 PyObject *
-PyDescr_NewGetSet(PyTypeObject *type, struct getsetlist *getset)
+PyDescr_NewGetSet(PyTypeObject *type, PyGetSetDef *getset)
 {
 	PyGetSetDescrObject *descr;
 
@@ -778,7 +793,7 @@
 	}
 }
 
-static struct getsetlist wrapper_getsets[] = {
+static PyGetSetDef wrapper_getsets[] = {
 	{"__name__", (getter)wrapper_name},
 	{"__doc__", (getter)wrapper_doc},
 	{0}