bpo-31404: Revert "remove modules from Py_InterpreterState (#1638)" (#3565)

PR #1638, for bpo-28411, causes problems in some (very) edge cases. Until that gets sorted out, we're reverting the merge. PR #3506, a fix on top of #1638, is also getting reverted.
diff --git a/Python/_warnings.c b/Python/_warnings.c
index 6dad080..ba00485 100644
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -38,6 +38,7 @@
 get_warnings_attr(const char *attr, int try_import)
 {
     static PyObject *warnings_str = NULL;
+    PyObject *all_modules;
     PyObject *warnings_module, *obj;
 
     if (warnings_str == NULL) {
@@ -57,7 +58,9 @@
         }
     }
     else {
-        warnings_module = _PyImport_GetModule(warnings_str);
+        all_modules = PyImport_GetModuleDict();
+
+        warnings_module = PyDict_GetItem(all_modules, warnings_str);
         if (warnings_module == NULL)
             return NULL;