Merging the py3k-pep3137 branch back into the py3k branch.
No detailed change log; just check out the change log for the py3k-pep3137
branch.  The most obvious changes:

  - str8 renamed to bytes (PyString at the C level);
  - bytes renamed to buffer (PyBytes at the C level);
  - PyString and PyUnicode are no longer compatible.

I.e. we now have an immutable bytes type and a mutable bytes type.

The behavior of PyString was modified quite a bit, to make it more
bytes-like.  Some changes are still on the to-do list.
diff --git a/Lib/email/base64mime.py b/Lib/email/base64mime.py
index 369bf10..cff558e 100644
--- a/Lib/email/base64mime.py
+++ b/Lib/email/base64mime.py
@@ -70,7 +70,7 @@
     # Return empty headers unchanged
     if not header_bytes:
         return str(header_bytes)
-    encoded = b64encode(header_bytes)
+    encoded = b64encode(header_bytes).decode("ascii")
     return '=?%s?b?%s?=' % (charset, encoded)
 
 
@@ -93,7 +93,7 @@
     for i in range(0, len(s), max_unencoded):
         # BAW: should encode() inherit b2a_base64()'s dubious behavior in
         # adding a newline to the encoded string?
-        enc = str(b2a_base64(s[i:i + max_unencoded]))
+        enc = b2a_base64(s[i:i + max_unencoded]).decode("ascii")
         if enc.endswith(NL) and eol != NL:
             enc = enc[:-1] + eol
         encvec.append(enc)
diff --git a/Lib/email/test/test_email.py b/Lib/email/test/test_email.py
index 74a3c9d..c544004 100644
--- a/Lib/email/test/test_email.py
+++ b/Lib/email/test/test_email.py
@@ -2448,9 +2448,7 @@
 
     def test_crlf_separation(self):
         eq = self.assertEqual
-        # XXX When Guido fixes TextIOWrapper.read() to act just like
-        # .readlines(), open this in 'rb' mode with newlines='\n'.
-        with openfile('msg_26.txt', mode='rb') as fp:
+        with openfile('msg_26.txt', newline='\n') as fp:
             msg = Parser().parse(fp)
         eq(len(msg.get_payload()), 2)
         part1 = msg.get_payload(0)