widgets: virtual cleanup, rebased from 7ed75b255b47f
Add has been changed to not be a virtual function as it can be used in constructors.
The way mouse entered and exited events are distributed have changed.

Before mouse entered events were only distributed to the widget directy
below the mouse and mouse exited events were distributed to the last
widget whom had received a mouse entered event. That solution had a problem.
Consider the case of a button inside a container. If the mouse would enter
the container, the container would receive a mouse entered event. So far as
expected, but if the mouse on a later stage would entered the button
the container would receive a mouse exited - even though the mouse was still
in the container area - and the button would receive a mouse entered event.
One would expect the container to receive a mouse exited event only when
the mouse actually leaves the container area.

The problem has been fixed using a stack holding all widgets with the mouse.
When the mouse enters a widget the widget and all of the widget's parents will
be pushed onto the stack (if they are not already present on the stack) and
they will all receive a mouse entered event. As soon as the mouse leaves a
widget present on the stack that widget will receive a mouse exited event
and it will be removed from the stack.
A bug when widgets wouldn't receive mouse exited events has been fixed and

a bug when a segfault occured when a widget requested modal focus has been
fixed.
widget: Fix DropDown color per b1a8419a
An attempt to fix a crash when a widget is deleted when the mouse moves has been applied.
Window has been changed to set moving to false when a mouse button is released.
A bug has been fixed so ImageFont will throw a proper exception if the

image is corrupt.
A bug has been fixed where mouse exited events were not sent if widgets changed from being visible to non visible.
An id property has been added to widget. The id can be used to uniquely identify

widgets inside a container. BasicContainer and Container have been
enhanced with the ability to find a widget given an id. An id can be
useful when using GUIs created from an XML file or created with a Gui
editor.
BasicContainer::findWidgetById has been changed to also search other embedded BasicContainers as well.
Unnecessary parenthesis have been removed.
A bug has been fixed where mouse entered and exited events weren't honored when a widget gained or released modal focus or modal mouse input focus.
Exception message typos have been fixed.
A selection listener interface has been added. The interface is used by ListBox.
A selection event has been added.
scons: Add selection event to build
Has been changed to utilise the SelectionEvent class.