ZKL: some tweak for ZKL for linux, added Add Spring AI feature

Linux fixes:
  * fixed Linux desktop shortcut . Linux have its own desktop shortcut, it can't use Window's shortcut (commit: https://github.com/xponen/Zero-K-Infrastructure/commit/d6a83e56709116df125556a0e268a6e64a2ee93d ).
  * fix Linux "Open Game Data Folder" & "Game Diagnostic Log" button not working. Existing implementation was not working because you forgot 3 slash in "file:///" protocol! (see https://github.com/xponen/Zero-K-Infrastructure/commit/a2423afcebdd425d0af0e9117b08acb59446737e ). In Linux its more strict than in Window, missing 1 slash make it think the "file://" protocol is pointing at network location, in Window its automatic (but I removed the "file://" implementation  and use implementation used by "Adv Setting" button for consistency).
  * make Emoji character ( see http://unicode-table.com/en/search/?q=emoji ) not break ChatTab  renderer in Linux (commit: https://github.com/xponen/Zero-K-Infrastructure/commit/6d3035c615ba9b7dbf1d44e2f75cea4836b502e8 ).  What happen is LuckyWaldo happened to post weird icon while I was using ZKL in Linux and it make the whole TextWindow in Chat Tab white! the "Graphic" object used in TextWindow suddenly failed when trying to render LucklyWaldo's character in Linux. So I added some check for this Emoji icon (which usually at index > Int16.maxValue). If the "Graphic g" show weird value, I skip drawing this character for safety (see the commit under OnDisplayText()  if want to see how I implement check).

Minor tweak:
  * fix springsettingform crash if started before joining any game (because haven't set engine folder path yet). (commit https://github.com/xponen/Zero-K-Infrastructure/commit/76befb4da3c7b50757a53745de25aa19563a8fc9 ). SpringPath was not set to any Engine during ZKL start (maybe somekind of design decision). So, I make Springsettingform set it to default Engine if user tries to open it.
  * Address bar accept "file://" prefix  (commit https://github.com/xponen/Zero-K-Infrastructure/commit/3a41663dcc6e00a724680e6d8175e7a246cdb9e6 ) for completeness. Currently it is not doing any work.
  * fix SpringScanner always block downloading Mod/Map info from Server if ZKL have not yet set Engine version (commit: https://github.com/xponen/Zero-K-Infrastructure/commit/c8a93ecb07da0b20f23321fe45b1a1014a0314b6 ). No need to wait for Spring Version if we just want to get Mod/Map name, hashes, type from server only. ( this behaviour probably because SpringScanner designer assume we always want to UnitSync new file, instead we just readding existing file, don't need Spring Version, If we don't have Spring Version we will still re-ask)

Code cleanup:
  * reduce code duplicate for "Add AI", "Game Option", & "Change Team" button in https://github.com/xponen/Zero-K-Infrastructure/commit/bc21b37820191c1db9caa3516fcec54fceefec2d

Added feature:
  * Added "Spring AI" menu option at very bottom of "Add AI" button (commit https://github.com/xponen/Zero-K-Infrastructure/commit/2dbacc607a6b64e709517b3f718d6bdedf8bb797 )

SkirmisherTab stuff:
  * Make Skirmisher Tab "Spring AI" do not use unitsync to find Spring AI (now check for AI list in AI folder in DataDir & Engine folder)
  * reduce update delay from 15 second to 3 second for Map/Mod/Engine list when new one is downloaded (15 second is too long)
  * improve code readability & better algorithm for SortByVersion() function used by SkirmisherTab as suggested by Licho
  * map tooltip moved to MapComboBox, no longer always appear when mouse hover over map (Not Multiplayer Map!)
  * save previous Map/Engine/Mod selection..


Other:
  * remove some more ISupportInitialize (which is known to might crash in Linux) (in commit: https://github.com/xponen/Zero-K-Infrastructure/commit/94cdc8c7e59fa20513115aa26eeba83cc5ad51a9 ). The problem is that Licho's SplitContainer override do not able to really override ISupportInitialize, it always use its own  ISupportInitialize, so it still must be removed.