Initial implementation of MaskedColumn
Fixed method resolution order
Fixed MaskedColumn
Table can now be initialized with a masked=True/False/None argument
Provide _mask properties to fix table __array__ methods for masking
Fix table Row so it is possible to always set mask values

MaskedArray __getitem__ has a strange behavior where if a row mask is
all False then it returns a np.void which has no mask attribute. This
makes it impossible to then set the mask.  Here we recast back to mvoid.
Add support for masked array in table init_from_ndarray
Make self.masked attribute read-only
Improvements to Table.masked property
Minor refactor and update for setting table.masked so tests pass
Add table column test fixture to test Column and MaskedColumn
Update table test_init_table for masking
Update table test_item_access for masking (not yet passing)
Skip table row reference test for masked, fix latent error in slice tests

(1) Numpy masked array uses mvoid for a single row of a structured array.
Unfortunately this makes a copy of the row data, unlike the corresponding
numpy.void class for plain structured arrays:

class mvoid(MaskedArray):
    """
    Fake a 'void' object to use for masked array with structured dtypes.
    """
    #
    def __new__(self, data, mask=nomask, dtype=None, fill_value=None):
        dtype = dtype or data.dtype
        _data = ndarray((), dtype=dtype)
        _data[()] = data
        _data = _data.view(self)

The workaround is to skip this test and document the behavior.

(2) The test_list_index_slice and test_fancy_index_slice tests had a line
like:
        assert np.any(t2['a'] != DATA['a'])
But this was wrong because t2 has been sliced so it is 2 rows long
versus DATA which is 3 rows long.  For plain ndarray this still works,
but for masked array it generated an attribute error deep
in the masked array code.  Changing to DATA['a'][slice] makes the
dimensions the same and made the test pass as it should.
Change table Row __eq__/__ne__ methods to raise for masked Table

This is in response to a bug in numpy.ma which doesn't allow
comparing structured masked array rows.  Below is the issue report
sent to numpy-discussion:

When comparing rows of a structured masked array I'm getting an
exception.  A similar operation on an structured ndarray gives the
expected True/False result.  Note that this exception only occurs if
one or more of the mask values are True, since otherwise both row
objects are np.void and the ndarray behavior is obtained.  (See PR
notwithstanding).

>>> from numpy import ma
>>> marr = ma.array([(1,2), (3,4)], dtype=[('x', int), ('y', int)])
>>> marr.mask[0][0] = True
>>> marr.mask[1][0] = True
>>> marr[0] == marr[1]
Traceback (most recent call last):
  File "<ipython-input-5-fecaee6f2991>", line 1, in <module>
    marr[0] == marr[1]
  File "/data/cosmos2/ska/arch/x86_64-linux_CentOS-5/lib/python2.7/site-packages/numpy/ma/core.py",
line 3573, in __eq__
    check = ndarray.__eq__(self.filled(0), odata).view(type(self))
TypeError: descriptor '__eq__' requires a 'numpy.ndarray' object but
received a 'numpy.void'

>>> arr = np.array([(1,2), (3,4)], dtype=[('x', int), ('y', int)])
>>> arr[0] == arr[1]
False

>>> np.__version__
'1.6.2'
Update table test_pprint.py and test_row.py for masks
Change table add_row to use ma.resize for masked table

The ma.array object does not support in-place resizing like
ndarray because it never owns its data.  So use ma.resize which
returns a new object.  Conveniently enough this method differs
from ndarray.resize in that it recycles array values instead of
inserting zeros.
Update test_table.py to run tests with masked tables
WIP for masking tests
Propagate existing mask values when available in Table init