Rework the dynamic grid generation to support adding widgets, at arbitrary positions.

-  Pad rows to make room for new/displaced widgets
-  Track changes to size and position
-  Add event when a widget is registered as changed
-  Some additional cleanup