diffgrid: Significantly rework size allocation

The previous method worked as long as there was exactly 2 rows, and there
were no widgets that spanned multiple columns. Unfortunately, that's
exactly what the FindBar does, in row 3.

The new model somewhat simplifies the grid allocation, and makes it more
generic by allocating by child using grid location data, rather than
doing allocation per-row, per-column (which doesn't work as soon as
widgets span multiple rows or columns).

There is still a lot of hard-coding of dimensions here, but this works
for now.
diffgrid: Refactor some variables
diffgrid: Fix pane width calculations and accumulate columns sensibly