Fixup exception handlers

Some exception types, specifically `mapgen_exception`, and the more generic `game::error` weren't being caught anywhere (except void main). I add handlers to game_launcher.cpp and playcampaign.cpp as appropriate. It's possible though that the `game::error` catch will break some things, a little hard to be sure.

This is vaguely relevant to this bug report: https://gna.org/bugs/?22828
although it might not really fix that, nor is that the full scope of this PR.

This PR also changes the solution to this bug: https://gna.org/bugs/?22611
instead of changing the exception type that the buttons throw, it properly catches that type.