bpo-42333: Port _ssl extension to multiphase initialization (PEP 489) (GH-23253)

- Introduce sslmodule_slots
- Introduce sslmodulestate
- Use sslmodulestate
- Get rid of PyState_FindModule
- Move new structs and helpers to header file
- Use macros to access state
- Keep a strong ref to socket type
diff --git a/setup.py b/setup.py
index 605f7d6..af38440 100644
--- a/setup.py
+++ b/setup.py
@@ -2428,14 +2428,6 @@ def split_var(name, sep):
             self.missing.extend(['_ssl', '_hashlib'])
             return None, None
 
-        self.add(Extension(
-            '_ssl', ['_ssl.c'],
-            include_dirs=openssl_includes,
-            library_dirs=openssl_libdirs,
-            libraries=openssl_libs,
-            depends=['socketmodule.h', '_ssl/debughelpers.c'])
-        )
-
         if openssl_rpath == 'auto':
             runtime_library_dirs = openssl_libdirs[:]
         elif not openssl_rpath:
@@ -2469,7 +2461,7 @@ def split_var(name, sep):
             Extension(
                 '_ssl',
                 ['_ssl.c'],
-                depends=['socketmodule.h', '_ssl/debughelpers.c'],
+                depends=['socketmodule.h', '_ssl/debughelpers.c', '_ssl.h'],
                 **openssl_extension_kwargs
             )
         )