UI: provide enter_widget_group/leave_widget_group
UI: add first WidgetGroup prototype
UI: add ContainerImpl::retrieve_widget_group()
UI: add WidgetImpl::find_widget_group()
UI: avoid vector copies in leave/enter_widget_group
RCORE: rename string_vector_find_value() to avoid ambiguities
RCORE: add string_split_any, string_vector_strip_empty
RCORE: add string_vector_lstrip/rstrip/strip
UI: introduce WidgetGroupType and add hsize_group/vsize_group properties
RCORE: rename string_vector_erase_empty to avoid ambiguities with strip variants
UI: merge WidgetGroup and SizeGroup
UI: expose Widget::requisition() through IDL API
UI: complete SizeGroup behaviour
PYTESTS: add unit test for H/V size groups
UI: consider only visible widgets in size groups
UI: remove debug printing
Merge branch 'widget-groups'

* widget-groups:
  UI: remove debug printing
  UI: consider only visible widgets in size groups
  PYTESTS: add unit test for H/V size groups
  UI: complete SizeGroup behaviour
  UI: expose Widget::requisition() through IDL API
  UI: merge WidgetGroup and SizeGroup
  RCORE: rename string_vector_erase_empty to avoid ambiguities with strip variants
  UI: introduce WidgetGroupType and add hsize_group/vsize_group properties
  RCORE: add string_vector_lstrip/rstrip/strip
  RCORE: add string_split_any, string_vector_strip_empty
  RCORE: rename string_vector_find_value() to avoid ambiguities
  UI: avoid vector copies in leave/enter_widget_group
  UI: add WidgetImpl::find_widget_group()
  UI: add ContainerImpl::retrieve_widget_group()
  UI: add first WidgetGroup prototype
  UI: provide enter_widget_group/leave_widget_group