map cells to arg slots at code creation time (closes #12399)

This removes nested loops in PyEval_EvalCodeEx.
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index bc0f34c..4355ef5 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -665,7 +665,7 @@
             return inner
         check(get_cell().__closure__[0], size(h + 'P'))
         # code
-        check(get_cell().__code__, size(h + '5i8Pi3P'))
+        check(get_cell().__code__, size(h + '5i9Pi3P'))
         # complex
         check(complex(0,1), size(h + '2d'))
         # method_descriptor (descriptor object)