Support for Python3.9 type hint syntax
Description
In python 3.9 and onwards, some generics are type hinted differently (Dict, List should be lowercase dict, list instead) as well as some syntax changes (Optional[Type] syntax replaced with Type | None syntax, along with Union[Type1, Type2] replaced with Type1 | Type2)
I added a new option to pythonOptions.features, a boolean "builtinGenerics". In python 3.9 it's enabled, and disabled for the previous versions. I use pretty simple logic to do it, just a couple of if statements and ternary operators to account for the new syntax.
Some ways quotes are handled around types was changed to support wrapping around unions. (see _suppressQuotes in PythonRenderer's namedType method)
Motivation and Context
To keep up with newer Python syntax.
How Has This Been Tested?
Tested with python 3.7 and python 3.9 using the scripted tests that use mypy (confirms that the syntax is valid, and that with python 3.7, it's not trying to use any of the new syntax) along with looking at the outputs manually and confirming that 3.9 uses the newer syntax.