SF patch# 1770008 by Christian Heimes (plus some extras).
Completely get rid of StringIO.py and cStringIO.c.

I had to fix a few tests and modules beyond what Christian did, and
invent a few conventions.  E.g. in elementtree, I chose to
write/return Unicode strings whe no encoding is given, but bytes when
an explicit encoding is given.  Also mimetools was made to always
assume binary files.
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
index 7e37c29..a4ae21a 100644
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -5,7 +5,7 @@
                               run_with_locale
 from operator import neg
 
-import sys, warnings, cStringIO, random, UserDict
+import sys, warnings, random, UserDict, io
 warnings.filterwarnings("ignore", "hex../oct.. of negative int",
                         FutureWarning, __name__)
 warnings.filterwarnings("ignore", "integer argument expected",
@@ -1455,11 +1455,11 @@
             self.assertRaises(ValueError, input)
 
             sys.stdout = BitBucket()
-            sys.stdin = cStringIO.StringIO("NULL\0")
+            sys.stdin = io.StringIO("NULL\0")
             self.assertRaises(TypeError, input, 42, 42)
-            sys.stdin = cStringIO.StringIO("    'whitespace'")
+            sys.stdin = io.StringIO("    'whitespace'")
             self.assertEqual(input(), "    'whitespace'")
-            sys.stdin = cStringIO.StringIO()
+            sys.stdin = io.StringIO()
             self.assertRaises(EOFError, input)
 
             del sys.stdout