bpo-38858: Reorganize pycore_init_types() (GH-17265)

* Call _PyLong_Init() and _PyExc_Init() earlier
* new_interpreter() reuses pycore_init_types()
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index add7519..1bfc7c1 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -565,19 +565,15 @@
         return status;
     }
 
+    if (!_PyLong_Init()) {
+        return _PyStatus_ERR("can't init longs");
+    }
+
     status = _PyUnicode_Init();
     if (_PyStatus_EXCEPTION(status)) {
         return status;
     }
 
-    if (_PyStructSequence_Init() < 0) {
-        return _PyStatus_ERR("can't initialize structseq");
-    }
-
-    if (!_PyLong_Init()) {
-        return _PyStatus_ERR("can't init longs");
-    }
-
     status = _PyExc_Init();
     if (_PyStatus_EXCEPTION(status)) {
         return status;
@@ -587,8 +583,8 @@
         return _PyStatus_ERR("can't init float");
     }
 
-    if (!_PyContext_Init()) {
-        return _PyStatus_ERR("can't init context");
+    if (_PyStructSequence_Init() < 0) {
+        return _PyStatus_ERR("can't initialize structseq");
     }
 
     status = _PyErr_Init();
@@ -596,6 +592,10 @@
         return status;
     }
 
+    if (!_PyContext_Init()) {
+        return _PyStatus_ERR("can't init context");
+    }
+
     return _PyStatus_OK();
 }
 
@@ -1447,16 +1447,7 @@
     }
     config = &interp->config;
 
-    status = _PyExc_Init();
-    if (_PyStatus_EXCEPTION(status)) {
-        return status;
-    }
-
-    status = _PyErr_Init();
-    if (_PyStatus_EXCEPTION(status)) {
-        return status;
-    }
-
+    status = pycore_init_types();
 
     /* XXX The following is lax in error checking */
     PyObject *modules = PyDict_New();