Resolve issue #2136 + Some fixups

1. delegate player name and color savings to a central function save_settings() in PlayerDataSelection, this is called by SinglePlayerMenu and MultiplayerMenu's hide()
2. add update_data() into PlayerDataSelection so that _gui is only inited once in SinglePlayerMenu and MultiplayerMenu, which is memory efficient and no load xml every time it is shown()
3. PlayerDataSelection's set_player_name() and set_color() only changes the display, all the savings are delegated to save_settings(), which can minimize data saving every time change color or player_name. This also gets rid of color saving in MP's change player data details popup in color selecting.
4. Track whether the MultiplayerMenu is open or not (instead of shown or not, cause show() can be called multiple times, if MP sub-menu opens), this helps subscribe and unsubscribe "error" in NetworkInterface()

Please review and comment. :-)