Add GtkListBox

This is basically an import/rename of EggListBox from the row-widget
branch of egg-list-box.
tests: Add testlist testing GtkListBox
testgtk: Add ListBox test

This is a simple test of a scrolling listbox with sorting, filtering
and a header row.
GtkListBox: Clean up DnD code

Unhighlight rows if they are removed.

Drop the automatic drag motion based auto-scrolling. This is not really
right, as it e.g. hardcodes auto-scroll regions and assumes we're the only
widget inside the scrolled container. Its also imho in the wrong place,
autoscrolling if any should be done on the scrolled-window or viewport.
All the removed code is implementable outside Gtk+ though.
GtkListBox: No need to manually clamp adjustment to focus

Now that we use real widgets for rows the focus_vadjustment is
enough.
GtkScrollableWindow: Automatically set focus adjustments

When adding with a viewport we automatically set the focus
adjustments on the viewport from the scrolled window, so that
when any child widget gets focused we automatically scroll to it.

This is generally nice, but its particularly important for GtkListBox
where focus changing is how we navigate between rows.

We also ensure that the adjustments are always set before adding the
child to the viewport, which we will need later to pick up the
adjustments on add.
GtkListBox: Remove add_to_scrolled()

Now that we automatically set up the focus_vadjustment we only
need the adjustment to handle the page-up/down scroll length correctly.

We use parent_set to automatically pick up the adjustment from a
scrollable (i.e. viewport) parent which makes add_to_scrolled useless, so
it can be removed.
GtkWidget: Change which states propagate

Historically the following states propagated to children:
  GTK_STATE_FLAG_ACTIVE
  GTK_STATE_FLAG_PRELIGHT
  GTK_STATE_FLAG_SELECTED
  GTK_STATE_FLAG_INSENSITIVE
  GTK_STATE_FLAG_INCONSISTENT
  GTK_STATE_FLAG_BACKDROP

However, several of these are problematic on containers like GtkListBox.
For instance, if a row is ACTIVE or SELECTED then all children (like e.g
a button) inside the row will *also* look active/selected. This is almost
never right. The right way to theme this is to catch e.g. SELECTED on the
container itself and set e.g. the color and let the children inherit
the color instead of the flag.

We now propagate only these flags:
  GTK_STATE_FLAG_INSENSITIVE
  GTK_STATE_FLAG_BACKDROP

Which make sense to be recursive as they really affect every widget
inside the container.

However, this is a CSS theme break, and while most things continue working
as-is some themes may need minor tweaks.
GtkListBox: Add docs
GtkListBox: Remove refilter signal

This was added from https://bugzilla.gnome.org/show_bug.cgi?id=691979
where it was wanted in order to get a "all children filtered" kind
of row. However, the solution is not really generic enough, because
filtering can happen for other reasons than a full refilter (i.e. due
to a row change), and the partial fix you can get by counting children
after refilter can be achieved by manually doing it whenever you manually
called refilter anyway.

Its possible we should have some better solution for the "empty state"
though.
GtkListBox: Rename separators to headers
GtkListBox: Allow unselecting of rows in SINGLE mode
GtkListBox: Fix docs

Removed some cut/paste leftovers
GtkListBox: Remove some unnecessary code

the unhighlight call already NULLs out drag_highlighted_row
GtkListBox: Make reseparate a no-op for hidden lists

We already take care to not track headers when the listbox is hidden,
because that can be very expensive during creation, so we might as
well skip reseparate() too. The only time we don't want to skip it
is when we're about to show the list.
GtkListBox: Open code the update_header calls in add()

Rather than reusing row_visibility_changed. This means
row_visibility_changed really means that the row visibility changed.
GtkListBox: Track visible in the row

This is a minor performance improvement, but its mainly to
allow us to track when n_visible_children changes.
GtkListBox: Track the number of visible children
GtkListBox: Add placeholder widget support
testgtk: Test GtkListBox placeholder widgets