WIP: support Table mixin columns

This is essentially the same as #1833, #1835, #1839 but will be done in the framework of #2790 as a follow-on once that is merged.

The starting point here will be fed00dc5f6d6d9529ed8f073c95346eb176fdfa6, which *removed* the proof-of-concept changes showing that mixin columns would be straightforward in the new column-based Table structure.   In this issue (and eventual PR) we can define the right way to support mixin columns like Quantity, Time, and SkyCoord.  The original proof-of-concept used a some simple class / instance variables, but @mhvk has proposed using an abstract base class.

Closes #1833
Closes #1835
Closes #1839
I guess this is one place where having `mask = FalseArray` raised a needed exception. But this can be handled by `np.ma.nomask` as well (though it raises a `TypeError`):
```
In [2]: nomask = np.ma.nomask

In [3]: nomask[:] = True
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-a6ff4a2650ae> in <module>()
----> 1 nomask[:] = True

TypeError: 'numpy.bool_' object does not support item assignment
```