Introduce logic for layout & widget alignments

* Remove UIBoxLayout::set_position; this method was intended for updating
the rendering coordinates, and is resolved by placing a layout directly
inside a widget container.

* UILayoutItem: Remove enum keyword from Orientations; this is intended
to be bitmask friendly.

* UILayout: Store a pointer to the parent widget that has the layout
installed, so that we can access its boundary data; we need this to
implement alignment features for the layout object (overall container, not
individual items).

* UIWidget: Introduce parent_bounds getter & setter (to support the above in
UILayout); set the parent bounds only when the object is a top-level window.
This allows us to capture the main window boundary, whose coordinates are
absolute.

* UILayout: Introduce horiz helper method.
* UILayout: Introduce initial logic implementation of set_alignment for both
the layout container and for individual objects.

* math/helpers.hpp: Fix nom::round function template.
* UIWidgetEvent: Remove an un-used constructor.

* ListboxLayoutTest: Add horizontal unit tests for layout alignments.
* ButtonLayoutTest: Add horizontal & vertical layout alignment tests.

* tests/gui/common.cpp: Remove set_layout_alignment helper method & replace
with improved helper method -- test_layout_alignment.