Issue #13896: Make shelf instances work with 'with' as context managers.

Original patch by Filip GruszczyƄski.
diff --git a/Lib/shelve.py b/Lib/shelve.py
index cc1815e..cfb6863 100644
--- a/Lib/shelve.py
+++ b/Lib/shelve.py
@@ -131,6 +131,12 @@
         except KeyError:
             pass
 
+    def __enter__(self):
+        return self
+
+    def __exit__(self, type, value, traceback):
+        self.close()
+
     def close(self):
         self.sync()
         try:
@@ -147,6 +153,7 @@
     def __del__(self):
         if not hasattr(self, 'writeback'):
             # __init__ didn't succeed, so don't bother closing
+            # see http://bugs.python.org/issue1339007 for details
             return
         self.close()