campaignd: Tiny variable refactoring
campaignd: Quick-and-dirty implementation of upload-time blacklisting

A path to a blacklist WML file may be provided in the campaignd
configuration file (server.cfg). The BL file, in turn, may contain
attributes for comma-delimited lists of wildcard patterns, accepting
shell-style '*' and '?', by leveraging utils::wildcard_string_match()'s
functionality.

The following lists of patterns are recognized at this time:

  ip=<numeric IPv4 address masks>
  email=<add-on author email masks>
  name=<add-on id/name masks>
  title=<add-on title masks>
  author=<add-on author masks>
  description=<add-on description masks>

Currently, the IP address mask list also takes '*' and '?' wildcards. My
intention is to use CIDR subnet masks instead of or in addition to this.

The blacklist WML file is only read by campaignd once at startup and
it's never written to, thus allowing to preserve any WML comment lines
that may be included in the file by admins for convenience.

The IP, email, name, title, author, and description of a (new or
existing) uploaded add-on are matched against the blacklist in that
order. If the add-on matches, the upload is aborted and the user is
shown a generic message in English, just like with every other possible
campaignd-side error (on the plus side, this means it can be backported
to 1.12).

All matches (except for IP matches, which only contain digits and
punctuation) are done case-insensitively.

Because of campaignd protocol limitations, the upload is only checked
and aborted after the client has already uploaded a weighty WML document
including the add-on archive. Such is life, I guess.
campaignd: Forgot to add a Doxygen comment to the last commit
Add test cases for utils::wildcard_string_match()
Test a few counterintuitive wildcard_string_match() border cases

It's probably best to leave them alone for now, though.
campaignd: Use utf8::lowercase() instead of a direct call to libc tolower()

Note that the next loop in the same chunk of code already uses
utf8::lowercase() even though both strings are really of the same
nature.
campaignd: Remove dead code
Return Grüü's gold to Kapou'e only if positive
AToTB S3: fixed story date inconsistency
TSG S3: "foul undead" -> "foul creatures", since there are no undead on EASY
add error reporting when [if] is evaluated with no actions

I frequently make the mistake of using {IF_VAR} but forgetting to
use [then] with it. One solution is to use my own macro, but the
better solution is to add proper error reporting to if. If the
engine parses an [if] tag with no [then], [else], or [elseif], it
should flag an error... otherwise these mistakes are generally
silent and very difficult to find.
update changelog
clear unused forward declarations
remove game_state::write_snapshot
split savegame.cpp into 2
Merge pull request #193 from gfgtdf/gamestate_refactor

Gamestate refactor part2
add end_play_signal type and visitors

This commit adds an "end_play_signal" type. It is meant to be used
in play_controller classes to prevent crashes due to bad exception
handling / collisions, and should help us to make assumptions more
easily about when networking operations will happen

It also adds some macros to avoid the proliferation of unreadable
try catch blocks.
push end_play exceptions down one level in playsingle_controller

This uses the macros introduced to handle game end exceptions.
It should be a strict refactor.

Rebased to accomodate conflict here: https://github.com/wesnoth/wesnoth/commit/516206a0ee2fc0826707da9d54b44ed051638050
Still a strict refactor.
push end_play_exceptions one down in call stack, at "play_turn()"

Continues trend of previous commit. play_turn becomes no throw
with respect to these exceptions, and so we can switch calls to it
to use the "PROPOGATE_END_PLAY_SIGNAL" instead of "HANDLE_...".

It looks like by progressively doing this and unit testing at each
step, we will be able to successfully convert all of the functions
in play_controller to use PROPOGATE, which is a cheap if else and
not an exception handler, and increase the stability of the engine
by avoiding the use of exceptions for control flow. If we continue
this way, we could push all the throws into the event handler
and the replay module. Perhaps could continue from there, but
likely at some point the exceptions might be the simpler solution
esp. for breaking recursion in WML / lua or things like this.
remove unnecessary handler macro from events::raise_draw_event

After discussion on irc, it seems that this function doesn't
throw end level or end turn exceptions, and some play testing
suggests that removing the handler macros here is alright.