Improved TopPipe performance by 600x

* made Expression.isDeterministic a val
* use a tuple with extracted context values for sorting, remove the need to re-lookup each expression value
* implement proper top-n select using a "runtime" approach with Arrays and binarySearch