Bring UserDict in-sync with changes to dict.

Constructor accepts optional keyword arguments after a optional items list.
Add fromkeys() as an alternate constructor from an iterable over keys.
Expand related unittests.
diff --git a/Lib/UserDict.py b/Lib/UserDict.py
index 02ddfc4..34ceb3a 100644
--- a/Lib/UserDict.py
+++ b/Lib/UserDict.py
@@ -2,13 +2,13 @@
 
 class UserDict:
     def __init__(self, dict=None, **kwargs):
-        self.data = kwargs              # defaults to {}
+        self.data = {}
         if dict is not None:
-            if hasattr(dict,'keys'):    # handle mapping (possibly a UserDict)
-                self.update(dict)
-            else:                       # handle sequence
-                DICT = type({})  # because builtin dict is locally overridden
-                self.data.update(DICT(dict))
+            if not hasattr(dict,'keys'):
+                dict = type({})(dict)   # make mapping from a sequence
+            self.update(dict)
+        if len(kwargs):
+            self.update(kwargs)
     def __repr__(self): return repr(self.data)
     def __cmp__(self, dict):
         if isinstance(dict, UserDict):
@@ -61,6 +61,12 @@
         return self.data.popitem()
     def __contains__(self, key):
         return key in self.data
+    def fromkeys(cls, iterable, value=None):
+        d = cls()
+        for key in iterable:
+            d[key] = value
+        return d
+    fromkeys = classmethod(fromkeys)
 
 class IterableUserDict(UserDict):
     def __iter__(self):