Mission objectives

This PR adds support for mission objectives.

Fixes #4541, #5499, #6081, #5501.

Mission objectives can be either primary or secondary objectives. The game is won when all primary objectives have been completed, or lost when any primary objective is failed. Secondary objectives do not influence the outcome of a game.

The decision whether an objective is completed or failed lies in the hands of map scripts (or the existing \*VictoryConditions traits). The back-end only stores the information about the objectives. It ***does*** however decide when a game is over.

The MissionObjectives trait can be configured to some degree to accommodate different game modes.  The defaults are suited for classic Skirmish multi-player games.

* The *EarlyGameOver* flag causes games to finish as soon as the first player has either failed or completed his objectives. If unset, the players would become observers instead to let the remaining players duke it out. You obviously want to have this set on single player missions.

* The *Cooperative* flag is meant for cooperative multi-player missions, and especially those where the players in a team have different sets of objectives. If set, this flag delays registering a win for a player that has completed his objectives until all of his team mates have also completed theirs. The reverse is true as well, where a single player that fails any of his primary objectives causes the whole team to lose. If used in conjunction with the *EarlyGameOver* flag, the rules explained in the previous bullet point apply to the whole team, not individual players.

Along with the back-end comes a front-end GUI panel that is tied in to the in-game options menu.
It's a tabbed window that can show:
* the map description and preview image, if any (as in: requires a preview image to be shown)
* either a statistics tab (the existing one from TD, actually), or a tab with the list of objectives and their status.  Which one is shown depends on the value of the *PanelName* property of the World's *ObjectivesPanel* trait (see trait documentation).
* the debugging options (still shortcut-accessible)

Also introduced with this PR is a new dialog that pops up when a game is over, sort of like a tally screen. It shows either the statistics or the objectives list mentioned above, or nothing if those aren't available (like in a replay, or when they are not configured). The dialog allows you to leave the game and exit to the main menu, and nothing else. It's not possible to return to the game.

Notes:
* Breaking change: maps using StrategicVictoryConditions must not use ConquestVictoryConditions any longer. I found only two KotH maps on the resource site, though, and both are currently already broken.
* What's missing is a sound notification when a new objective is added. Currently, only the *Options* button blinks in that case.

Other stuff that fell out of these changes:
* it is now possible to unregister event handlers using the Lua API.
* the surrender button is now disabled instead of invisible when not applicable
* it is now possible to surrender even in scripted maps
* some ui logic cleanups
* some additions to our Lua API, and a converted gdi01 as a test case, thanks to @Mailaender.