* Use exception state to abstract 3.12 or before differences. This
solves a TODO about more very in-efficient code generated that
also requires many conversions of exceptions back and forth from
3 value form to normalized.
* Moved compile time debug settings to separate file.
* Pass the exception state into unpacking function for more
efficient code. No need to fetch exceptions per use of
those into the exception state, but it can directly write to
there.
* Solve TODO and have helper for unpacking length check. When
migrating to Python3, this became a custom template with a
lot of manual code that pre-defined the error messages to
give too.
* Have our own variant of "_PyGen_FetchStopIterationValue" to
avoid API calls in generator handling.
* Generate more efficient code for raising exceptions of builtin
type. Rather than calling them as a function, create them via
base exception new directly which will be much quicker.
* Faster exception creation, avoid having "args" and a tuple need
to hole them for empty exceptions avoiding one more allocation.
* Remove uses of "PyTuple_Pack" and replace with our own helpers
to avoid API calls.
* Avoid implicit exception raise nodes with delayed creation, have
exception making nodes instead.