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. 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.
3. 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. :-)