Fix a bug in TrueTypeFont

Merge a bug fix into nomlib from SFML -- the origins of the method's
logic. Thanks grandseiken!

[SFML Issue #669](https://github.com/LaurentGomila/SFML/pull/669)
Toggle build units, tests, examples for GUI dev
Fix state events ordering bug

The order in which events are processed led to TTcards' events being
consumed in the incorrect order, leading to the bug of us not being
able to use the same key binding for both states.
Rename StateMachine::pop_state( void* )

...to StateMachine::pop_state_resume( void* ) to clarify which method
is being used.
Fix event update logic in ListBox && QuestionDialogBox

Internal updates to the storage model of said widgets need to occur
before emitting the event (for end-user to respond to), otherwise the
data will always be inaccurate (one-off).

* QuestionDialogBox: Disable calling of base class for events; this
corrects a bug in TTcards (ContinueMenuState) when clicking on either
the title or message, due to duplicate indexes being used in both
widgets (TTcards depends on the values for cursor action).

* ListBoxLayoutTest: Re-enable event callbacks -- MOUSE_DOWN, KEY_DOWN,
MOUSE_WHEEL (debugging aid).
Refactor states management interface in SDLApp

* SDLApp: Forward declare Event, RenderWindow, IState and StateMachine.
* SDLApp: Introduce StateMachine object pointer and getter/setter for
use with states management; remove the state management methods from
class (for future maintenance sake).
Fix event callbacks crash by using deferred states management

The transition of the state must be deferred until the next frame update
in order for engine callback systems, i.e.: nom::InputMapper and
nom::UIWidget, to be used within application-level code (TTcards)
that expects to be able to change its state from within said callback
systems. If not deferred, the result is invalid memory access due to
the deletion of the state before the callback is completed.

* Add IState to public headers (system.hpp).
* IState: Forward declare RenderWindow.
* IState: Rename UniquePtr typedef to unique_ptr.
* IState: Rename StateFlags enum to Flags, remove Null enum value
and clean up comments.

* IState: Introduce Type enumeration, getter & ctor argument; describe
placement of state (internal use within deferred state management).

* StateMachine: Forward declare Event, IState, RenderWindow & clean up
header files.
* StateMachine: Remove push_state method; obsolete by deferred states.
* StateMachine: Remove default parameter from data argument in methods.
* StateMachine: Remove pop_state_resume; obsolete by deferred states.
* StateMachine: Introduce next_state method.
Clean up on nom::InputMapper API

* EventCallback: Add const Event& arg for passing to callback method;
this allows us to use the associated event data (i.e.: mouse
coordinates) in application-level code for determining the course of
action.

* EventCallback: Clean up class; forward declare Event, remove un-
necessary methods, such as copy ctor, assignment operator, etc.

* Move KeyboardAction, MouseButtonAction, MouseWheelAction,
JoystickButtonAction and JoystickAxisAction declaration &
implementation into InputAction's file set.

* Refactor InputAction's API to allow for cleaner use & maintenance;
in particular: a) Action structs now inherit off InputAction, whom is
now a base class; b) InputAction now stores a native nom::Event object
for event type & state needs; c) Setting of the callback function has
been moved to InputActionMapper::insert method.

* Clean up examples/events.cpp; disable user event dispatching (still a
bit buggy...), update the RenderWindow background only on event callback,
fix up comments, etc.
Bit of clean up StateMachine class

* StateMachine: De-nest DeferredState struct && declare under nom::priv
namespace.

* StateMachine: Rename ::size to ::count.
* StateMachine: Rename ::previous_state to ::current_state_id.
* StateMachine: Rename ::next_state to ::next_state_id.
* StateMachine: Rename class var deferred_state_ to next_state_ &&
change type from std::queue to a single struct.
* StateMachine: Rename class var states to states_.

* SDLApp: Remove (comment) out assertion for NULL state in ::states
getter.

* SDLApp: Add assertion for NULL pointer passing in
::set_state_machine.
Initial events propagation handling logic (widgets && states)

* UIWidget: Change return type of virtual input event method
implementations to bool (from void); this allows us to implement
simple event propagation logic from within UIWidget::process_event.
  This resolves a couple implementation issues that was preventing
proper widget focus from occuring in ListBox -- "WheelFocus" and lack
of key input focus without first explicitly clicking within the widget
bounds).

* IState: Change return type of virtual ::on_event method
implementation to bool (from void). This allows us to implement
event propagation logic handling, of which is required in order to
begin tying in GUI widgets event processing into application-level
code (TTcards).

* StateMachine: Refactor ::on_event events handling logic to call the
state's EventHandler::process_event method only when IState::on_event
returns false (which is the default). This lets us override the event
handling to begin figuring out how to best plug widget event handling
into the overall engine.
Implement action trigger bindings for mouse button clicks

* MouseButtonAction: Implement clicks field (analogue to
SDL_MouseButtonEvent::clicks field).

* InputStateMapper: Implement logic for recognizing mouse button
clicks; this lets us implement action triggers that take into account
the number of clicks (i.e.: left mouse button double click action).

* InputStateMapper: Clean up conditional logic within ::on_key_press
and ::on_mouse_button methods.
  The logic clean up within ::on_key_press appears to have fixed a
mismatch bug when using multiple key modifiers with a single symbol
(i.e.: SDLK_e, KMOD_LGUI && SDLK_e, KMOD_NONE), leading to only one
of the actions being executed.

* examples/events: Add mouse button mapping for testing the new clicks
action triggering feature; this is for implementing bindings that allow
for single, double, ... button clicks to be acted on.

* examples/events: Add simulated (fake) input event test; the
internal nom::EventHandler::push_event method offers us this
capability.

---

VisualUnitTest: Add key binding for quickly terminating all tests

* The returned exit code should always match the number of failed tests
up to the moment of termination.

* UnitTest: Introduce ::failed_test_count method. This is used for the
return exit code (see above).
DataViewListTest: Clean up logging output

* Use NOM_LOG_CATEGORY_TEST for variable dumps & disable the logging
priority level for it by default.
Refactor SDL2Logger to use abstracted logging priority enum

* SDL2Logger: Introduce nom::LogPriority enumeration -- deriving from
SDL_LOG_PRIORITY for the time being) -- in future preparation for
abstraction of the logging subsystem. All SDL_LOG_PRIORITY enumerations
have been replaced throughout the engine.

* SDL2Logger: Introduce convenience static methods for conversion to
and fro SDL_LogPriority and nom::LogPriority.

* SDL2Logger: Introduce humna-friendly string descriptions of each
priority level; this will eventually be used for things like dynamic
runtime logging via command-line switches. Note its particularly nice
use in the callback example in SDL2LoggerTest as well.

* src/CMakeLists.txt: Relocate building SDL2Logger & its dependencies --
system/clock.cpp, system/ObjectTypeInfo.cpp, system/IObject.cpp -- to
NOM_BUILD_CORE_UNIT, the engine core; this better suits the overall
organization, and it allows us to skip building the system unit in many
more circumstances.
Introduce colored logging output for Unix & Windows platforms

* ConsoleOutput is the pubic interface (controls UnixConsoleOutput and
WindowsConsoleOutput). ConsoleOutputTest has been added for testing of
the interface.

* SDL2Logger: Introduce log output callback to use for the new colored
output feature.

* cmake/platform.cmake: Introduce NOM_PLATFORM_POSIX var; this gets set
when OSX or LINUX is detected, in order to ease the sharing of common
source files between the operating systems.

* Relocate SDL2LoggerTest from 'tests/src/system' to 'tests/src/core'.

Resolves Issue #16
Split off SDL2Logger dependencies to new top-level dir
Fix MSVCPP compiling errors on WindowsOS

* StateMachine: MSVCPP didn't seem to like the double std::move
action going on in ::set_deferred state -- and I can't say I
can blame it after looking at the mess of the logic!

* sdl_helpers.hpp: Fix macro collision with RGB function that can
happen depending on inclusion path with wingdi.h -- commonly from
including windows.h.

* Size2.hpp, Color4.hpp: Fix another macro collision with std::min
and std::max that can happen depending on inclusion path with
windef.h / windows.h. This one is just flat out dumb!
Fix documentation regarding mouse wheel X & Y values

The documentation for EventHandler::on_mouse_wheel is wrong -- the
values are inverted from what they should be.
VisualUnitTest: Fix lack of window termination through WM close
EventHandler: Fix bug that led to duplicate window && mouse events

The lack of switch breaks at the end of the event's top-level switch
handlers led to duplicate events being fired, i.e.: two
SDL_MOUSEBUTTONUP events being fired for one. -_-
  This is a bug squash that has been plauging me for some time now!
Fix CMake Policy CMP0048 warning (version vars)

...regarding the usage of the reserved PROJECT_VERSION variables. I've
chosen to opt out (use old, pre-3.0 CMake behavior).