Add the 'bool' type and its values 'False' and 'True', as described in
PEP 285.  Everything described in the PEP is here, and there is even
some documentation.  I had to fix 12 unit tests; all but one of these
were printing Boolean outcomes that changed from 0/1 to False/True.
(The exception is test_unicode.py, which did a type(x) == type(y)
style comparison.  I could've fixed that with a single line using
issubtype(x, type(y)), but instead chose to be explicit about those
places where a bool is expected.

Still to do: perhaps more documentation; change standard library
modules to return False/True from predicates.
diff --git a/Lib/pickle.py b/Lib/pickle.py
index 21ea215..96ee5c1 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -101,6 +101,9 @@
 EMPTY_TUPLE     = ')'
 SETITEMS        = 'u'
 BINFLOAT        = 'G'
+TRUE            = 'Z'
+FALSE           = 'z'
+
 
 __all__.extend([x for x in dir() if re.match("[A-Z][A-Z0-9_]+$",x)])
 del x
@@ -256,6 +259,13 @@
         self.write(NONE)
     dispatch[NoneType] = save_none
 
+    def save_bool(self, object):
+        if object:
+            self.write(TRUE)
+        else:
+            self.write(FALSE)
+    dispatch[bool] = save_bool
+
     def save_int(self, object):
         if self.bin:
             # If the int is small enough to fit in a signed 4-byte 2's-comp
@@ -629,6 +639,14 @@
         self.append(None)
     dispatch[NONE] = load_none
 
+    def load_false(self):
+        self.append(False)
+    dispatch[FALSE] = load_false
+
+    def load_true(self):
+        self.append(True)
+    dispatch[TRUE] = load_true
+
     def load_int(self):
         data = self.readline()
         try: