SF bug #759889:  Pickling of Random is broken

* Implement __reduce__() to support pickling.
* Add a test case to prove a successful roundtrip through pickle.
diff --git a/Lib/random.py b/Lib/random.py
index 1ae2553..1a0b8f3 100644
--- a/Lib/random.py
+++ b/Lib/random.py
@@ -123,6 +123,9 @@
     def __setstate__(self, state):  # for pickle
         self.setstate(state)
 
+    def __reduce__(self):
+        return self.__class__, (), self.getstate()
+
 ## -------------------- integer methods  -------------------
 
     def randrange(self, start, stop=None, step=1, int=int, default=None):
diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py
index 970b862..ea2243d 100644
--- a/Lib/test/test_random.py
+++ b/Lib/test/test_random.py
@@ -3,6 +3,7 @@
 import unittest
 import random
 import time
+import pickle
 from math import log, exp, sqrt, pi
 from sets import Set
 from test import test_support
@@ -102,6 +103,12 @@
             self.assertEqual(x1, x2)
             self.assertEqual(y1, y2)
 
+    def test_pickling(self):
+        state = pickle.dumps(self.gen)
+        origseq = [self.gen.random() for i in xrange(10)]
+        newgen = pickle.loads(state)
+        restoredseq = [newgen.random() for i in xrange(10)]
+        self.assertEqual(origseq, restoredseq)
 
 class WichmannHill_TestBasicOps(TestBasicOps):
     gen = random.WichmannHill()