#3247 Get rid of Py_FindMethod; use tp_members instead.
Otherwise dir(_sre.SRE_Match) returns an empty list.

First step: handle most occurrences, remove tp_getattr and fill the tp_methods and tp_members slots.
Add some test about attribute access.
diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c
index d2299aa..f0d03d7 100644
--- a/Modules/_threadmodule.c
+++ b/Modules/_threadmodule.c
@@ -119,12 +119,6 @@
 	{NULL,           NULL}		/* sentinel */
 };
 
-static PyObject *
-lock_getattr(lockobject *self, char *name)
-{
-	return Py_FindMethod(lock_methods, (PyObject *)self, name);
-}
-
 static PyTypeObject Locktype = {
 	PyVarObject_HEAD_INIT(&PyType_Type, 0)
 	"_thread.lock",			/*tp_name*/
@@ -133,10 +127,28 @@
 	/* methods */
 	(destructor)lock_dealloc,	/*tp_dealloc*/
 	0,				/*tp_print*/
-	(getattrfunc)lock_getattr,	/*tp_getattr*/
+	0,				/*tp_getattr*/
 	0,				/*tp_setattr*/
 	0,				/*tp_compare*/
 	0,				/*tp_repr*/
+	0,				/*tp_as_number*/
+	0,				/*tp_as_sequence*/
+	0,				/*tp_as_mapping*/
+	0,				/*tp_hash*/
+	0,				/*tp_call*/
+	0,				/*tp_str*/
+	0,				/*tp_getattro*/
+	0,				/*tp_setattro*/
+	0,				/*tp_as_buffer*/
+	Py_TPFLAGS_DEFAULT,		/*tp_flags*/
+	0,				/*tp_doc*/
+	0,				/*tp_traverse*/
+	0,				/*tp_clear*/
+	0,				/*tp_richcompare*/
+	0,				/*tp_weaklistoffset*/
+	0,				/*tp_iter*/
+	0,				/*tp_iternext*/
+	lock_methods,			/*tp_methods*/
 };
 
 static lockobject *