compile _bytesio and _stringio into the binary and initalize stdio before site fixing #3279

Reviewer: Alexandre Vassalotti
diff --git a/Misc/NEWS b/Misc/NEWS
index f388f11..8cc1af0 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@
 Core and Builtins
 -----------------
 
+- Issue #3279: Importing site at interpreter was failing silently because the
+  site module uses the open builtin which was not initialized at the time.
+
 - Issue #3660: Corrected a reference leak in str.encode() when the encoder
   does not return a bytes object.
 
@@ -125,6 +128,8 @@
   update this code in Python 3.0 by hand. Update the 2.6 one and then
   do "2to3".
 
+- The _bytesio and _stringio modules are now compiled into the python binary.
+
 Tools/Demos
 -----------
 
diff --git a/Modules/Setup.dist b/Modules/Setup.dist
index d2c8971..a2b20ca 100644
--- a/Modules/Setup.dist
+++ b/Modules/Setup.dist
@@ -113,6 +113,8 @@
 _codecs _codecsmodule.c		# access to the builtin codecs and codec registry
 _fileio _fileio.c		# Standard I/O baseline
 _weakref _weakref.c		# weak references
+_bytesio _bytesio.c		# For Lib/io.py
+_stringio _stringio.c		# For Lib/io.py
 
 # The zipimport module is always imported at startup. Having it as a
 # builtin module avoids some bootstrapping problems and reduces overhead.
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 39c86e7..3e40d51 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -239,11 +239,11 @@
 	}
 
 	initmain(); /* Module __main__ */
-	if (!Py_NoSiteFlag)
-		initsite(); /* Module site */
 	if (initstdio() < 0)
 		Py_FatalError(
 		    "Py_Initialize: can't initialize sys standard streams");
+	if (!Py_NoSiteFlag)
+		initsite(); /* Module site */
 
 	/* auto-thread-state API, if available */
 #ifdef WITH_THREAD
diff --git a/setup.py b/setup.py
index 7837c8a..bc47a89 100644
--- a/setup.py
+++ b/setup.py
@@ -439,9 +439,6 @@
         exts.append( Extension('operator', ['operator.c']) )
         # _functools
         exts.append( Extension("_functools", ["_functoolsmodule.c"]) )
-        # Memory-based IO accelerator modules
-        exts.append( Extension("_bytesio", ["_bytesio.c"]) )
-        exts.append( Extension("_stringio", ["_stringio.c"]) )
         # C-optimized pickle replacement
         exts.append( Extension("_pickle", ["_pickle.c"]) )
         # atexit