Bit of misc clean up

* GUIApp: Change 'WindowList' type definition value type from
Window::SharedPtr to Window::unique_ptr.
* GUIApp: Remove (comment) copy constructor, copy assignment operator &
get methods.

* Window: Rename type definitions.
* Window: Remove WindowShapeIterator type definition; use auto keyword
in place of.

* IObject: Rename type definitions.
* IObject: Add ObjectType enums IFontObject, ListBoxObject,
ButtonObject, BitmapButtonObject, UIEventObject &&
UIEventCallbackObject.

* Template: Rename type definitions.

* DataViewList: Associate the nom::Event object with each UIEvent object
created within ::on_event. SpriteBatch object types now send an UIEvent
with the index set as the current frame identifier used for rendering
of the sprite sheet.

* examples/gui.cpp: Re-arrange order of widget examples; the new order
is as per the order we attach the windows in (see App::on_init).

* examples/gui/create_dataviewlist_ex2: Rename 'sprite' to 'menu_elements'
and move the object to private class scope. The sprite's load method call
has been relocated to App::on_init, now grouped with all the other file
resources.

* examples/gui/create_dataviewlist_ex2: Clone each menu_element sprite as
we push each one into the values_2 column, so that we are able to change
sheet frames on the fly.
Gradient: Refactoring && introduce std::vector<Color4i> support

* examples/gui/create_listbox_ex0: Use raw pointers for construction
of window (instead of nom::Window::WindowShape).

* examples/gui.cpp: Use Window::set_shape for construction of window
objects (instead of nom::Window::WindowShape) in all but one widget
example; this is the preferred API syntax.

* Gradient: Default construction to opaque color Color4i::Blue.

* Gradient: Introduce Gradient::Colors type definition -- std::vector
of Color4i -- and replace all instances of old array usage with
vectorized usage; this allows us to use C++ style brace initialization
to initialize our colors! Thus, methods 'set_start_color' &&
'set_end_color' has been obsoleted & removed.

* Gradient: Introduce type definitions for self_type, raw_ptr,
unqiue_ptr && shared_ptr.
* Gradient: (Experimental) Replace get method with operator * method
overload.
* Gradient: (Experimental) Introduce operator -> method overload.
* Gradient: Introduce set_colors method; for new brace style
initialization.
* Gradient: Remove deprecated 'initialize' method.

* Gradient: Rename method 'enable_dithering' to 'set_dithering' &&
'enable_dithering_' class var to 'dithering_'.

* Gradient: Make update method private & introduce updated_ class var
along with obligatory getter & setter methods. Implement internal
object up-to-date state logic (alike other implementations in nomlib).

* Rectangle: Introduce type definitions; 'self_type', 'raw_ptr',
'unique_ptr' && 'shared_ptr'.
Fix erroneous setting of object's updated state upon void ctor

* This fix effects the GrayFrame, MessageBox && QuestionDialogBox
classes.
Gradient: Disable internal update state logic

* The update logic is broken somewhere in TTcards's CardView class;
see fixme note regarding class var updated_.
config.hpp.in: Introduce C macros NOM_IGNORED_VARS && NOM_IGNORED_ENDL.
IDrawable: Introduce clone method.

* Line: Introduce type definitions for 'self_type', 'derived_class',
'raw_ptr', 'unique_ptr' and 'shared_ptr'.

* Sprite: Introduce type definitions for 'self_type', 'derived_class',
'raw_ptr', 'unique_ptr' and 'shared_ptr'.
Window: Flesh out a few more minor details of class interface

* Window: Introduce method getters && setters for class vars 'id',
'name' && 'updated'.
* Window: (Experimental) Introduce stub method 'generate_id' for
future management of each window's object id instance.
* Window: Introduce reserved class vars 'enabled' && 'visibile'.
SpriteBatch: Implement IDrawable::clone method

* To be safe, we ought not rely on Sprite's clone method, for fear of
potential type / data loss when converting object types.

* SpriteBatch: Rename type definitions to match lower case style
recently adopted.
SublimeText project file: Ignore file 'config.hpp'

* config.hpp is auto-generated by CMake now, so we need to refer to
config.hpp.in instead (this is an enforced reminder for me).
config.hpp.in: Introduce a couple macros

* Introduce NOM_BIND macro; helps shorten the C++ lamda style syntax
for callbacks.

* Introduce NOM_DISABLE_GFX_LOG_TRACE preprocessor definition for quickly
turning off NOM_LOG_TRACE debug output on the following classes: Image,
Texture, Text, BitmapFont and TrueTypeFont,
IState: Introduce optional method 'on_event' interface

* This provides us an alternative way to access the underlying events
subsystem without using the virtual method calls provided by
EventHandler -- allowing us to bypass it entirely if need be.

* StateMachine: Rename method 'process_event' to 'on_event' -- this was
done to lessen the confusion of the many classes that use the same
name, but more importantly to resolve an issue where
EventHandler::process_event was being called instead of the intended
IState::process_event (as it is the most derived class within that area).
Major overhaul on events handling subsystem -- Observer pattern events

* UIEventHandler: Rename of ::on_event method to ::process_event.

* UIEvent: Introduce constructors for initializing with a nom::Event
object, as well as initializing its internal index, text & event class
variables.

* UIEvent: Introduce UIEventType enumerations (hopefully a temporary
means of providing event type info across our GUI class interfaces).

* Introduce UIEventDispatcher class interface; this provides a simple,
flexible Observer pattern to events handling, and replaces
Window::register_delegates entirely.

* QuestionDialogBox: Rename ChoiceTexts to ItemStrings && introduce ItemLabels
type definition.

* QuestionDialogBox: Introduce helper methods 'selection', 'items_size'
and 'set_selection'.

* QuestionDialogBox: Rudimentary text color change upon selection
support logic.

* QuestionDialogBox: Implement rudimentary events logic for handling
SDL_MOUSEBUTTONDOWN, SDL_KEYDOWN && SDL_MOUSEWHEEL actions.

* MessageBox: Fix issue where we could not use register both available
event listeners -- mouse button & mouse selection -- by relocating the
window-scope logic below the of the conditional checks.

* ListBox: Implement rudimentary events logic for handling
SDL_KEYDOWN && SDL_MOUSEWHEEL actions.

* Window: Introduce global_bounds method.
* Window: Move event dispatching functionality: delegates, registration and
the ::on_event virtual  method into a new class interface --
nom::UIEventHandler. nom::Window now derives from the UIEventHandler
class. nom::UIEventHandler inherits Transformable so that Window and
friends is still able to use its methods.

* GUIApp: Introduce ::on_update method; reserved for future use (not used yet).

* examples/gui: Introduce events dispatcher tests.
* examples/gui: Dedicate two new callback methods for listbox_ex2 widget
for testing mouse wheel & keyboard actions;  'listbox_ex2_on_selection',
'listbox_ex2_key_selection'.

* examples/gui: Dedicate two new callback methods for qbox_ex0 widget
for testing mouse wheel & keyboard actions;  'qbox_ex0_wheel_selection',
'qbox_ex0_on_selection', along with a class-scope object pointer to the
qbox_ex0 widget found in create_qbox_ex0 helper method.
Fix compile errors with MSVCPP

* config.hpp.in: Fix compile errors that result from using
NOM_IGNORED_VARS, NOM_IGNORED_ENDL macros on non-clang
(i.e.: MSVCPP) platforms.

* UIEventDispatcher: Fix compile err on MSVCPP; missing header file.
Introduce UnitTestTemplate.cpp -- for use with GTest

* CMakeLists.txt: Change NOM_BUILD_TEMPLATES_UNIT from an option to a
variable; this allows us to toggle the variable on/off without
regenerating
the project files.

* tests/CMakeLists.txt: Introduce (optional) compiling
UnitTestTemplate.cpp.
Introduce output of function in NOM_DUMP, NOM_LOG_INFO macros

* config.hpp.in: Redefine NOM_DUMP_VAR macro to use NOM_DUMP.

* config.hpp.in: Add function signature to NOM_DUMP and NOM_LOG_INFO
macros.
Refactor ListBox widget

* types.hpp: Introduce static variable 'npos'.

* Window: Introduce updated && set_updated methods.

* Introduce gui_config.hpp.

* Introduce UIItemContainer class for use with ListBox & alike widgets.

* ListBox: Refactor class to use UIItemContainer for its internal
storage of items; this makes ListBox responsible for only rendering.
Items now must be accessed via ::store object pointer and set using
either ListBox's constructor or ::set_item_store.

* ListBox: Introduce support for conserving spare CPU cycles by updating
rendering object list by calling ::update internally when necessary, and
returning before rendering would occur when object state is up-to-date.

* ListBox: Introduce support for changing the highlighted (selected)
item's text color.

* ListBox: The valid method now checks for validity of the internal
storage object (UIItemContainer).

* ListBox: Implement default event listeners for key press, mouse down
and mouse wheel aactions. This addition has two side effects; a) breaks
user-defined registration of event listeners (will be fixed in a future
version); b) event actions are updated on all widgets simultaneously,
due to the fact that we do not yet handle widget focus, and will also be
corrected in a future version.

* Introduce tests/gui/UIItemContainerTests.cpp for UIItemContainer class.

* examples/gui.cpp: Call GUIApp::on_update method in the game loop.

* examples/gui.cpp: Relocate App::do_event_dispatcher_tests & its helper
methods to tests/gui/UIEventDispatcherTests.cpp.
Gradient: Fix internal update state

* Transformable: Maake set_position && set_size methods virtual.

* Gradient: Re-implement Transformable's set_position && set_size
methods with a call made to Gradient::update. This corrects the
consistency issue previously observed in TTcards. The update logic
in the class has been re-enabled.
Gradient: Fix MSVCPP compile err
Additional implementation & refactoring work

(In no particular order this time)

* config.hpp.in: Add timestamp to NOM_DUMP macro

* types.hpp: Rename NOM_PTR_CAST to NOM_SHARED_PTR_CAST && introduce
NOM_PTR_CAST.

* Gradient: Move Colors type definition to Color4i.

* Text: Fix incorrect setting of text color in constructors.
* Text: Re-introduce set_font( IFont::shared_ptr ) method; mostly for
internal resource management.

* UIEventHandler: Rename size method to count; this resolves an issue
with inheritance from Transformable.
* UIEventDispatcher: Remove an emit method signature that wasn't being
used but by the unit tests.

* UIEvent: Introduce id, set_id methods.

* Window: Implement id field in constructors; all widgets have had their
constructors updated to support the required id field.

* Window: Implement automated window_id generation via generate_id method.

* Window: Introduce focused class var, along with its getters and
setter methods.

* Window: Introduce set_title method.

* Window: Introduce contains method for detection of IDrawable and Text
object bounds with a given position.

* Window: Implement validate_dimensiosn method. This allows us to assume
the bounds of the parent window via passing -1 to widget's position, size
arguments.

* Window: Remove pos, size constructor.
* Window: Fix font management issue.

* GrayFrame: Refactor class to not inherit from Window.

* Introduce Drawables container class.

* Introduce IDecorator, Decorator, MinimalDecorator, FinalFantasyDecorator
framework classes. This allows us to easily change the background
and/or border style of a window or widget. This replaces Window::set_shape
functionality (along with its constructor).

* ListBox: Introduce hit_test method, re-implement Window::set_focused
method.
* ListBox: Implement focused widget functionality via mouse click, mouse
wheel and keyboard.
* ListBox: Use new Drawables container; this replaces the ItemLabels
type definition.
* ListBox: Major clean up of process_event method.

* Color4i: Introduce several new static colors for future use with widgets.

* Transformable: Remove constructor for position.
* Transformable: Introduce global_bounds method and set_position,
set_size method variants.

* examples/gui: Introduce LucidaGrande font resource & OS X Aqua style
bitmap button.

* IObject: Introduce RTTI functionality in IObject; ObjectTypeInfo is a
helper container for this new functionality. This has replaced
IObject::ObjectType enum and type method.

* IObject: Introduce is_type, is_a methods for type safe identification
of classes. Introduce equality and in-equality operators.

* IObject: Implement new and delete operators for debugging aid support,
along with a print out of the total number of bytes allocated and
deallocated.

* GUIApp: Removal of class; nom::Window has replaced class
functionality.
Introduce stub files for UILayout class interface