AOI S7: removed redundant difficulty-conditional recruit list
AOI S7: removed [ai] tag from player side
small refactor of strict mode logging

Move a bool flag that remembers if we threw an exception, to be a
local static variable in that function, rather than at file scope.
This ensures that no other functions will mess with it.
rename builder.cpp -> terrain_builder.cpp

Since that's the class that it defines.
bad_lexical_cast derives from std::exception
catch bad lexical casts (from parsing map locations from configs)
add map_location characterization tests

There is a compiler option to generate the expected output set for
the current build, see test_map_location.cpp
Remove 'allow_new_game=no' entries from random map new game list
refactor synced_commands [move] to use read_locations, not reimpl.
fixup test_map_location.cpp

Was checking vector sum commutativity twice, replaced with an
anticommutativity test for vector_difference.
Fix map_locations.cpp read_locations function

read_locations will no longer silently process a mismatched list of
x and y integers as a valid path, instead it will throw a
bad_lexical_cast. gfgtdf and I discussed on irc, we don't believe
that this will break save or replay compatibility, and it could
potentially help to catch possible OOS bugs in the future. I am
currently passing all my C++ and WML unit tests with this commit.

This commit also changes the [command] [move] handler over to use
this function directly without checking for mismatched lists, so
if this commit is reverted that function will still work correctly.
Fix bug 22020: correct help pointer for base units with variations
improve the performance of map_location.cpp

For two variables known to be either 0 or 1, && is faster than *.
For example && can short-circuit and * cannot in C++ afaik.
Merge branch 'map_location'