* Pass IDialogParent to IVideoWriter impls via ctor instead of param
* Refactor IDialogController/Parent, moving some of it to Client.Common
tl;dr: MessageBoxButtons.OK => ShowMessageBox/ModalMessageBox,
MessageBoxButtons.YesNo or .OKCancel => ShowMessageBox2/ModalMessageBox2,
MessageBoxButtons.YesNoCancel => ShowMessageBox3/ModalMessageBox3.
Possible breaking change: Cheats had `Owner ?? this` as its "self", which I
think parented any modals it opened to MainForm instead of the Cheats window.
The Cheats window will be their parent now regardless. Other than that, all the
icons and stuff for all the other dialogs should be exactly the same.
* Remove WinForms dep from AV classes where possible
* Cleanup CoreFileProvider init, passing MainForm as IDialogParent
* Pass MainForm as IDialogParent to MovieSession
* Pass IDialogController through to one MovieZone ctor
* Use MessageBox helpers in RecordMovie
* Implement IDialogParent on misc. Forms to use MessageBox helpers
* Use MessageBox helper in misc. config Forms
* Pass IDialogController through to misc. Forms for MessageBox helpers
MainForm intentionally frame advances right after rewinding; this is so it can capture a new framebuffer. The old rewinder sort-of understood this, the new one does not.
Tweak the logic so the new rewinder behaves like the old one, but only when the interval is 1. When the interval is greater than 1, don't go farther back than we have to.
No particular behavior is guaranteed when nonlinear time exists (ie, rewinding through manual loadstates).
Fixes#2667.
* `Game Gear` was used instead of `GGL` for linked GG multi-disk bundles and
core constructor (I assume the latter was a hack to fix loading bundles made
with the former bug in effect)
* `Arcade` was used instead of `MAME` in rom loading ("Arcade" is also assigned
to an out param in the MAME ctor but I assume that's an intentional placeholder)
* `Saturn` was used instead of `SAT` in `GameSharkDecoder.CheatDomainName`,
making it non-functional (a comment said it was probably incorrect, so I'm
assuming that if it runs something will break and putting it in #if false)
* `G7400` was only used in firmware IDs, replaced with `O2`
* `Vectrex` was only used in firmware IDs, replaced with `VEC`
* `uzem` (core name) was used instead of `UZE` for MainForm title lookup, making
it non-functional
* `DNGP` doesn't exist