LazyArray supports negative index and pull_all() method
Fix model.select_bottom() behavior in lazy mode

model.select_bottom() now eagerly pulls results and select the actual
last item correctly, instead of the partially fetched result's last
one.
model.select_index() try select specified index optimistically

Now model.select_index(-1) works for LazyArray
Simplify model.select_bottom(): just give -1