Fix for SF bug ##497426: can't deepcopy recursive new objects

deepcopy(), _reconstruct(): pass the memo to the other function, so
that recursive data structures built out of new-style objects may be
deeply copied correctly.

2.2.1 bugfix!
diff --git a/Lib/copy.py b/Lib/copy.py
index 14eff05..86fc978 100644
--- a/Lib/copy.py
+++ b/Lib/copy.py
@@ -172,7 +172,7 @@
                 raise error, \
                       "un-deep-copyable object of type %s" % type(x)
             else:
-                y = _reconstruct(x, reductor(), 1)
+                y = _reconstruct(x, reductor(), 1, memo)
         else:
             y = copier(memo)
     else:
@@ -279,10 +279,12 @@
     return y
 d[types.InstanceType] = _deepcopy_inst
 
-def _reconstruct(x, info, deep):
+def _reconstruct(x, info, deep, memo=None):
     if isinstance(info, str):
         return x
     assert isinstance(info, tuple)
+    if memo is None:
+        memo = {}
     n = len(info)
     assert n in (2, 3)
     callable, args = info[:2]
@@ -291,11 +293,11 @@
     else:
         state = {}
     if deep:
-        args = deepcopy(args)
+        args = deepcopy(args, memo)
     y = callable(*args)
     if state:
         if deep:
-            state = deepcopy(state)
+            state = deepcopy(state, memo)
         y.__dict__.update(state)
     return y