UIBoxLayout: Fix several calc bugs in size_hint, minimum_size

* UIBoxLayout: Introduce total_size_hint && total_minimum_size methods
* UIWidget: Declare maximum_size and minimum_size methods virtual.

* Button: Remove minimum_size method.
* Button: Set the minimum size only when passed size is valid
(non-NULL).
* Button: Set size policy to Minimum / Minimum.

* ListBox: Set the minimum size only when passed size is valid
(non-NULL).
* ListBox: Set size policy to Minimum / Minimum.

* BitmapButton: Set the size policy to Minimum / Minimum; fixes
a spacing bug that was introduced by the fact that the widget
was using the dimensions of another widget.

* UILayoutPolicy: The default initialization of the class policy vars
is now set to zero / zero -- was Preferred / Preferred.

* tests/gui/common.cpp: Remove expected_layout_output; the unit tests
have been updated to use expected_layout_widget_pos and
expected_layout_widget_dims.

* tests/gui/common.cpp: Ensure that test fails when item is NULL.

* ButtonLayoutTest: Use larger width for button1 & provide tests for
ALL layout item dimensions.
UIWidget: Do not initialize a UIStyle object at construction

This corrects a bug that was never intended; I want UIStyle use to be
optional -- opted in by the end-user at will.

* Button: Use defaults when UIStyle object is not available when
creating a new text label.
* Listbox: Initialize a default text selection color when UIStyle is
not available.

* Listbox: Improve the visual appearance of the widget by aligning text
to TopCenter & providing a bit of Y-axis padding to offset the text away
from the top border.