Remove __del__ methods to avoid creating uncollectable cyclic trash.
Keep close() methods for backwards compatibility.

Does any call close() explicitly?
diff --git a/Lib/urllib2.py b/Lib/urllib2.py
index 3fbb5e3..35a46be 100644
--- a/Lib/urllib2.py
+++ b/Lib/urllib2.py
@@ -170,12 +170,6 @@
     def __str__(self):
         return 'HTTP Error %s: %s' % (self.code, self.msg)
 
-    def __del__(self):
-        # XXX is this safe? what if user catches exception, then
-        # extracts fp and discards exception?
-        if self.fp:
-            self.fp.close()
-
 class GopherError(URLError):
     pass
 
@@ -307,13 +301,9 @@
             bisect.insort(self.handlers, handler)
             handler.add_parent(self)
 
-    def __del__(self):
-        self.close()
-
     def close(self):
-        for handler in self.handlers:
-            handler.close()
-        self.handlers = []
+        # Only exists for backwards compatibility.
+        pass
 
     def _call_chain(self, chain, kind, meth_name, *args):
         # XXX raise an exception if no one else should try to handle
@@ -436,7 +426,8 @@
         self.parent = parent
         
     def close(self):
-        self.parent = None
+        # Only exists for backwards compatibility
+        pass
         
     def __lt__(self, other):
         if not hasattr(other, "handler_order"):