Convert header columns to the new column fragment regime.
Represent a group as a collection of rows, not as a table.
Break render_groups into two functions.

process_groups returns rows and columns; render_groups adds them to the DOM.