libcommon: Began setting up a mechanism for defining episodes

As a first step, dynamically generate the episode selection menu from
some currently hardcoded 'EpisodeInfo' records prepared during game
startup. Once finalized these definitions should moved to the games'
resource pack.

Next step: Remove current assumptions about episode availability for
a given game mode and programmatically set up menu actions according
to whether the defined starting map(s) actually exist.
libcommon: Added 'menuHelpInfo' and 'menuShortcut' to EpisodeInfo
Cleanup|libcommon|Menu: Removed unused 'parameters' arg from menu::Widget action callbacks

This is effectively a "widget event" mechanism. There is no real use
for routing arguments in this way now that the menu widgets have been
updated to use an object-oriented model. Indeed most of these callbacks
are used to implement widget-internal behaviors, rather than to action
game menu logics specifically.
Cleanup|libcommon|Menu: Removed unused menu::Widget, action callback return value
Refactor|libcommon|Menu: Use QVariant for menu::ButtonWidget user data
libcommon|Menu: Fix CVarToggleWidget activation on page init
libcommon: The starting map for an episode is defined by EpisodeInfo
All Games|Menu: Added an episode selection menu to all games

Todo: Automatically skip episode selection if only one is defined.
All Games|Menu: Automatically skip episode selection if only one is defined
All Games|Menu: Disable selection of episodes whose start map is missing

With the shareware game modes, the "buy the full game prompt" will be
displayed. Otherwise, disable the relevant button on the episode menu
and log a warning for the mod author.
libcommon: Cleanup
libheretic: Use map URIs to determine A_BossDeath special triggers
libdoom: Use map URIs to determine A_BossDeath special triggers
libdoom64: Use map URIs to determine A_CyberDeath special triggers
libcommon: Continued updating code dependent on recently deprecated functions
Refactor|libcommon: Read-only cvar 'map-id' is now a URI

Also removed the now unused G_CurrentMapNumber()
libcore|SavedSession: SavedSession::metadata now records the current episode

As of this commit, we are now ready to move the currently hardcoded
map progression to MAPINFO.
Refactor|libcommon: Translate MAPINFO 'nextMap' numbers to URIs

Once all the definitions have been read, translate any Hexen warp
trans numbers used when referencing other maps into URIs.
libcommon: Kludge around a compatibility issue with Hexen's MAPINFO

MAPINFO in the commercial versions of the Hexen IWADs contain a bunch
of broken definitions. As later definitions now replace earlier ones
(a change from ZDoom), these broken defs will now override the earlier
"good" defs.

For now we'll kludge around this issue by patching such defs with the
original/expected values.

Todo: Determine how ZDoom behaves and replicate that behavior.
Todo for later: Isolate this compatibility swamp by moving the MAPINFO
parser to load time translator plugin.
libcommon: Translate MAPINFO, episode 'startMap' numbers to URIs

Once all the definitions have been read, translate any Hexen warp
trans numbers used when referencing the starting map of an episode.