'Return the value of a row or a cell in this table.  If
``index`` is an integer, then the row value for the ``index``th
row.  This row value consists of a tuple of cell values, one
for each column in the row.  If ``index`` is a tuple of two
integers, ``(i,j)``, then return the value of the cell in the
``i``th row and the ``j``th column.'

def __getitem__(self, index):

    if isinstance(index, slice):
        raise ValueError('Slicing    not    supported')
    elif (isinstance(index, tuple) and (len(index) == 2)):
        return self._rows[index[0]][self.column_index(index[1])]
    else:
        return tuple(self._rows[index])
