prevent the dict constructor from accepting non-string keyword args #8419

This adds PyArg_ValidateKeywordArguments, which checks that keyword arguments
are all strings, using an optimized method if possible.
diff --git a/Lib/test/test_dict.py b/Lib/test/test_dict.py
index 4ba0b71..6c5f682 100644
--- a/Lib/test/test_dict.py
+++ b/Lib/test/test_dict.py
@@ -7,6 +7,12 @@
 
 class DictTest(unittest.TestCase):
 
+    def test_invalid_keyword_arguments(self):
+        with self.assertRaises(TypeError):
+            dict(**{1 : 2})
+        with self.assertRaises(TypeError):
+            {}.update(**{1 : 2})
+
     def test_constructor(self):
         # calling built-in types without argument must return empty
         self.assertEqual(dict(), {})