Issue #2377: Make importlib the implementation of __import__().

importlib._bootstrap is now frozen into Python/importlib.h and stored
as _frozen_importlib in sys.modules. Py_Initialize() loads the frozen
code along with sys and imp and then uses _frozen_importlib._install()
to set builtins.__import__() w/ _frozen_importlib.__import__().
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 4737d54..42cd169 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -2377,6 +2377,35 @@
 }
 
 PyObject *
+_PyObject_CallMethodObjIdArgs(PyObject *callable,
+        struct _Py_Identifier *name, ...)
+{
+    PyObject *args, *tmp;
+    va_list vargs;
+
+    if (callable == NULL || name == NULL)
+        return null_error();
+
+    callable = _PyObject_GetAttrId(callable, name);
+    if (callable == NULL)
+        return NULL;
+
+    /* count the args */
+    va_start(vargs, name);
+    args = objargs_mktuple(vargs);
+    va_end(vargs);
+    if (args == NULL) {
+        Py_DECREF(callable);
+        return NULL;
+    }
+    tmp = PyObject_Call(callable, args, NULL);
+    Py_DECREF(args);
+    Py_DECREF(callable);
+
+    return tmp;
+}
+
+PyObject *
 PyObject_CallFunctionObjArgs(PyObject *callable, ...)
 {
     PyObject *args, *tmp;
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 3db7a5e..5d8910f 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -788,6 +788,16 @@
     return ep->me_value;
 }
 
+PyObject *
+_PyDict_GetItemIdWithError(PyObject *dp, struct _Py_Identifier *key)
+{
+    PyObject *kv;
+    kv = _PyUnicode_FromId(key); /* borrowed */
+    if (kv == NULL)
+        return NULL;
+    return PyDict_GetItemWithError(dp, kv);
+}
+
 static int
 dict_set_item_by_hash_or_entry(register PyObject *op, PyObject *key,
                                Py_hash_t hash, PyDictEntry *ep, PyObject *value)
diff --git a/Objects/exceptions.c b/Objects/exceptions.c
index f3dde11..a2f2e44 100644
--- a/Objects/exceptions.c
+++ b/Objects/exceptions.c
@@ -2344,9 +2344,9 @@
 #endif /* MS_WINDOWS */
 
 void
-_PyExc_Init(void)
+_PyExc_Init(PyObject *bltinmod)
 {
-    PyObject *bltinmod, *bdict;
+    PyObject *bdict;
 
     PRE_INIT(BaseException)
     PRE_INIT(Exception)
@@ -2414,9 +2414,6 @@
     PRE_INIT(ProcessLookupError);
     PRE_INIT(TimeoutError);
 
-    bltinmod = PyImport_ImportModule("builtins");
-    if (bltinmod == NULL)
-        Py_FatalError("exceptions bootstrapping error.");
     bdict = PyModule_GetDict(bltinmod);
     if (bdict == NULL)
         Py_FatalError("exceptions bootstrapping error.");
@@ -2546,7 +2543,6 @@
             Py_DECREF(args_tuple);
         }
     }
-    Py_DECREF(bltinmod);
 }
 
 void