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/pydoc.py b/Lib/pydoc.py
index f8fafa3..eea9853 100755
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -1804,8 +1804,8 @@
         document = re.sub(addrpat, '', re.sub(divpat, '', file.read()))
         file.close()
 
-        import htmllib, formatter, StringIO
-        buffer = StringIO.StringIO()
+        import htmllib, formatter, io
+        buffer = io.StringIO()
         parser = htmllib.HTMLParser(
             formatter.AbstractFormatter(formatter.DumbWriter(buffer)))
         parser.start_table = parser.do_p
@@ -1816,7 +1816,7 @@
         buffer = replace(buffer.getvalue(), '\xa0', ' ', '\n', '\n  ')
         pager('  ' + buffer.strip() + '\n')
         if xrefs:
-            buffer = StringIO.StringIO()
+            buffer = io.StringIO()
             formatter.DumbWriter(buffer).send_flowing_data(
                 'Related help topics: ' + ', '.join(xrefs.split()) + '\n')
             self.output.write('\n%s\n' % buffer.getvalue())
@@ -1900,9 +1900,9 @@
             else:
                 loader = importer.find_module(modname)
                 if hasattr(loader,'get_source'):
-                    import StringIO
+                    import io
                     desc = source_synopsis(
-                        StringIO.StringIO(loader.get_source(modname))
+                        io.StringIO(loader.get_source(modname))
                     ) or ''
                     if hasattr(loader,'get_filename'):
                         path = loader.get_filename(modname)