Implement first/last reductions

Need to make sure that this is the same as `DataShape(10, 10, bool_)` rather than `DataShape(10, 10, DataShape(bool_))`