Fix reference cycle between Table and Column

As discovered while looking into #2877 there is a reference cycle that goes:

`Table` -> `TableColumns` -> `Column` -> `Table`

by way of the `parent_table` attribute on columns.  This fixes it by making `parent_table` a weakref (hidden away via a `property` allowing minimal code changes elsewhere).  A test demonstrating the fix is included.