Fix an assertion failure in the GUI2 placement.

If a vertical scrollbar is added to a widget its size is recalculated.
Unfortunalty the determination of the minimum width didn't take the
horizontal scrollbar in account. This lead to the container to be too
small for a widget with horizontal and vertical scrollbar causing the
placement to fail.

Fixes bug #22095, possibly #15615 and #21785.
Let listboxs update its contents when adding rows.

Before only remove reduced the size, now the adding also updates contents.
This should reduce the number of layout updates.
Avoid calling the change callback twice.

This caused issues with the gamestate inspector in combination with the
provious commit. Since the code only seems to be required for the
experimental MP lobby it has been disabled.
Remove redundant window invalidations.

The other commits in this branch make the calls to invalidate_layout()
redundant.
Merge branch 'gamestate_dialogue_improvements'

Improves the gamestate inspection dialogue. It fixes a long-standing
assertion issue and also reduces the amount of redundant work done.

Note the dialogue can still be improved further, but the currently
shown dialogue is /a/ valid way to show its contents.

The merge fixes bug #22095, possibly #15615 and #21785.