Properly handle atom keys in kw_list_to_string

If you have a keyword list, with an atom key like `["foo.bar": "baz"]`, previously, Macro.to_string would render it as `"[foo.bar: \"baz\"]"`. This is incorrect, instead it should be `"[\"foo.bar\": \"baz\"]"`. This change fixes that.