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/struct.py b/Lib/struct.py
index 10085b7..45f6729 100644
--- a/Lib/struct.py
+++ b/Lib/struct.py
@@ -26,8 +26,6 @@
 The variable struct.error is an exception raised on errors.
 """
 
-# XXX Move the bytes and str8 casts into the _struct module
-
 __version__ = '3.0'
 
 
@@ -36,7 +34,9 @@
 class Struct(_Struct):
     def __init__(self, fmt):
         if isinstance(fmt, str):
-            fmt = str8(fmt, 'latin1')
+            fmt = bytes(fmt, 'ascii')
+        elif isinstance(fmt, buffer):
+            fmt = bytes(fmt)
         _Struct.__init__(self, fmt)
 
 _MAXCACHE = 100