Add a hook for registering custom datagrid columns.

DataGrid now has a more formal column registration and defaults setup.
Instead of scanning all columns at instance creation time and populating
some defaults, it now does this once per class. This lets us get rid of
some of our variables and to store less state in memory.

The new DataGridColumnsHook allows extensions to register custom columns
into any DataGrid. This takes care of both registering and unregistering
them.