Adding CLI mode to GUI build. Moving code from MainNoGUI.cpp to CLI.cpp for this purpose.

Adding option to open a save state or a recording. (A recording could previously be started but not through open.)

Adding option to play a recording as a benchmark by running it without a frame limit and measure the frame rate. The feature is accessible from the CLI.

When opening a savestate or recording the ISO is selected by ID. The ScanDirectoryTreeRecursive code is moved from GameListCtrl to FileUtil for that reason.
Fix: Don't show BrowseForDirectory if no ISO is set, instead disable the Play and Start Recording options.

The BootManager is changed to try; the default iso, the last iso, if an empty string is provided. Code is moved from FrameTools to BootManager for that reason. If a file is not found it tries the path with the ISO path(s) prefixed (so that the file path can be relative to a library path).

Logging to OutputDebugString when the process is not debugged too because the messages can be of interest then too.

Changing the nogui suffix to cli because it's a more common term.
Adding savestate version check when opening savestates.

Fix for wiimote playback when the gcpad has been recorded.

Writing OSD messages to logmanager too.
Adding option to load state by mtime.
Load last state is expanded to 8 actions, for newest to oldest state.
A new action is to overwrite the oldest state (or use an empty slot if available).
The code to wait for a save to be written is necessary because the alternative would be to keep track of files in queue to be saved which would be unnecessarily complex.

Adding remaining hardcoded state keys to hotkey dialog.

Adding a program exit hotkey.