Rewrite Main Menu.
Specify menu and submenu buttons title, tooltip, hotkey and actions comfortably in an extensible JS object and derive the GUI object settings based on that rather than relying on complex markup alternating with JS in the same file.
Automatically compute the position and number of submenu items instead of letting the author manually compute and keep that in sync in various places of the XML file.
Use object oriented programming, so that there is a strong separation of concerns, allowing the readers and authors to only involve themselves with the component relevant to the feature they work on, refs #5387.
Use class keyword instead of prototype keyword for the JS classes, because that enforces a policy where no globals are inserted between class members and informs the reader of that as soon as reading the classes first line, anticipating fragmentation.
Group project information and community links in a more clearly arranged JS file.
Keep and document splashscreen onTick hack from rP13597, #2042, #5578.
String change: Inform instead of warn (deter) about the state of the game in the main menu.
Depends on Engine.SetGlobalHotkey from D2260.
Differential Revision: https://code.wildfiregames.com/D2240
Class syntax comments by: Krinkle, bb, Chakakhan, smiley, nani, fpre
Main menu comments by: Krinkle, nani, Stan (and Imarok in D820)