Clean up indexing, take 2

This is a reimplementation `getindex`/`setindex!` based on the implementation in Base. nd indexing now works, as does setting part of a DataArray to be another DataArray that contains NAs.

Performance of `a[1:end] = a[1:end]` is roughly 2x Base. I think this could still be improved by hoisting loads of the fields of the DataArray/PooledDataArray, but I need to see if that's possible without making the code substantially more complicated.

Indexing with a DataArray that contains NAs now throws. I removed some tests that were testing indexing operations that now throw a BoundsError. (These indexing operations also throw a BoundsError on Arrays.)