Rework first() and last()
Rework first() and last()

This will now used the internal array pointer instead of copying
the whole collection. This should improve the performance

ramsey/collection,ramsey/collection