Group aggregate #1546

@taldcroft please have a look at the changes. Also here is a comparison of np.sum and np.add.reduceat.
![comparison](https://cloud.githubusercontent.com/assets/5782112/3280724/346b350a-f479-11e3-9f7f-d364b806d2b4.png)

Test for `isinstance(par_col, MaskedColumn)`.  There is nothing preventing a user setting the `mask` attribute on an unmasked column if they wanted:
```
>>> t = Table([[1]])
>>> t['col0'].mask = 'hello world'
>>> t['col0'].mask
'hello world'
```