I see you logic (especially after the troubles with masked matrices for `.flat`...; indeed, cc @seberg) but one of the main points of this PR is actually that, to allow the baseclass to have its say in getting and setting. For astropy's `Quantity`, getting a proper slice would work fine, since that gets turned back into a `MaskedArray` and is updated (which is important as it copies the `Quantity`'s unit). But if one gets a single item, ndarray's `__getitem__` leaves one with an `np.float64` object, which, if not masked, will be returned as is, i.e., one has lost the unit (or, more generally, removed the baseclass aspect of the item).

Indeed, the above is why we have a `Quantity.__getitem__` : we return a single item as an array scalar instead (and have an internal property that remembers that this is a scalar).