Major restructure of UI code (incomplete).

Added new class: GameClient. This class is serves as the interface
between NetworkHost nad UserInterface, and between World and
UserInterface.

Shuffled some code between UserInterface and MainDisplay. And moved some
code from main into ui.

The ultimate goal of these changes is to confine all Allegro code to the
UserInterface class. Especially the global state parts of Allegro.
Fixed a minor line of sight problem.

Previously, grapheme updates and map updates didn't use the same LoS
ordering, which resulted in minor inconsistencies.
Zone::PlaceCharacter will no longer cause an infinite loop.

Also, reordered the member declarations in World to fix a problem which
could cause the game to seg-fault when exiting.
Restructured some of the UI so that is uses boost::signals.

Functions to handle state updates, key presses, and (in the future)
mouse events should now be used as 'slots' for their corresponding event
signals.
Improved fps calculation and enabled display. Tweaked b_expectingUpdate.
Added some basic mouse tracking framework to UserInterface.
The mapping of names to sprite numbers is now done with a json file.

Previously this data was hard-coded. Now it is stored in graphics.json
Removed (unused) displaycore files.
Pause indicators are now handled by a dedicated UiWidget type.

Commented out the old pause bar code and replaced it with a new widget
class, PauseIndicatorWidget, which basically just does the same thing.

Added function UserInterface::get_pause_list.
UserInterface::ReportStateUpdate is now private.
MainDisplay is no longer derived from UiWidget.
Holding alt when pressing a direction key now triggers an attack command
Spawn rates are now asciocated with Zone rather than being global.

Also defgen no longer attempts to pass the text of data.cpp.
Instead, it simply compiles data.cpp to extract the data.
Changed the way the game's graphics are loaded.

The atlas bitmap file is now specfied in graphics.json, and the
name-to-graphics sprite map is now kept indefinitely rather than being
immediately discarded after finding the sprites we need.
Added new item: warp stone. (But it currently doesn't do much.)
Changed PlayerId_t to force stricter type checking.

PlayerId_t is now an enum rather than a typedef; and so int does not
implicitly convert to PlayerId_t. The parts of the code which used this
implicit conversion have been updated accordingly.

Fixed a bug in the placement of new characters (found because of the
strict type rules!)

Changed a call to 'typeof' in GameClient to 'decltype', for standards
complicance.
Added some more UI code infrastructure.

Added some generic routines for handling widget mouse clicks and drawing
Removed some explicit Allegro calls from MainDisplay.
Added a new widget: Mini Menu. (It currently does nothing.)

The mini-menu widget is drawn at the bottom of the map.
Currently, some icons are displayed, but they have no UI functionality.
Removed a couple of duplicated draw widget calls.
The warp stone item can now be used.

World::ChangeZone is now public.
All references to ALLEGRO_COLOUR are now confined to UserInterface.

ALLEGRO_COLOUR has been replaced by UserInterface::Colour_t (typedef),
and al_map_rgb_f, al_color_name, etc. have been replaced by an
overloaded static function: UserInterface::Colour.
World::ChangeZone now takes an entry_tile argument.

Warp stones will no longer always place the player at the stairs.
Reduced the likelyhood of stunned character walking into walls.