sync unit creation in [side]

especialy the traits, we use a set_random_determinstic for that.
html.py: hone regexes for URL linking

First, a couple of extraneous quotes were left in the second regex around
"</a>".

Second, it is possible that a period or question mark could be used to end
a sentence, rather than be part of the URL. So check that these characters
are followed by an alphanumeric character to make them part of the URL.
wmllint: warn about no side key in [set/(dis)allow_recruit],[store_gold]

Those who are updating from old UMC may otherwise be caught unawares by the
change from defaulting to side 1 when the side key is missing, to all
sides. Later we will have an option to turn off this warning.
wmllint: warn about no side key in [*_shroud],[gold],[modify_side/ai]

Those who are updating from old UMC may otherwise be caught unawares by the
change from defaulting to side 1 when the side key is missing, to all
sides. Later we will have an option to turn off this warning.

Since the insertion of an attribute line is now commented out, it may be
questioned whether this still belongs in hack_syntax. However, at some
point the plan is to give users an option to insert the side= key.
wmllint: add option to turn off missing side= key warning
fs: Use game data path to resolve ./ in the absence of a current_dir

Fixes a file content disclosure bug (#22042) affecting functionality
relying on the get_wml_location() function and not passing a non-empty
value for the current_dir parameter.

See <https://gna.org/bugs/?22042> for details.

This is a candidate for the 1.10 and 1.12 branches.
fs: Assert that game_config::path is not empty in get_wml_location()

Let's see if this breaks some absurd border case I couldn't think of.
Quick testing revealed that early initialization, campaignd, and
wesnothd at least did not fail the assertion check.
Refresh team flags after using [modify_side] color= without a new flag set

Fixes bug #21867.