This is needed for property search where we want to highlight a button's label if it matches the search
filter. Otherwise the button itself is highlighted but it has no idea what label to highlight.
This is especially important because of the use of property split layouts where the label is almost
always outside of the button in a separate column.
The button groups here are basically just a flattened view of the layout data. Every function that adds
a new set of buttons creates a new button group, and the new buttons are added automatically to
that group. Then, each group is searched separately in the property search phase. It's important that
every function adding a new set of buttons has a call to layout_root_new_button_group.
Not that this isn't currently disabled when property search isn't active. It may be useful for other things
in the future, and trying to pass that information to the layout functions didn't feel worth it to me.