Ensure we always use instances of the adapter specific column class

- Create a consistent API across adapters for building new columns
- Use it for custom properties so we don't get `UndefinedMethodError`s
  in stuff I'm implementing elsewhere.
Merge pull request #15397 from sgrif/sg-column-class

Ensure we always use instances of the adapter specific column class