Centralize game background drawing code.

No need to duplicate it everywhere.
Keep track of whether a savestate has been used.

Mostly to improve info we get in reporting.
Reset reporting on a new game.

This way "once" and "spam" no longer persist between runs.  Makes it
easier to test a bunch of games in a row without restarting in between.
Lock out reporting if harmful settings are used.

Before, if you turned it on, broke stuff, and then turned it off, we
reported the broken stuff.  This could be responsible for various
messages that have seemed strange.
Skip reporting when fonts do not exist.

I'm really tired of all the "no font" reports that aren't really valid.
Add configuration settings to reporting.
Centralize getting and setting or config settings.

Typos in Set() and etc. can be things of the past.

Only General so far.
Redo the rest of the config sections.

Now they're all just once, rather than twice.
Use consistent names for reporting config settings.
Let's use typesafety in the config stuff.
Merge pull request #5388 from unknownbrackets/reporting

Adjust reporting to track and send more things