Max cost as a function of Time, Memory and Parallelism
- Include "hashCost" (TimeCost * MemoryCost * Parallelism) on the Timing result
- Updated max cost based selector to use hashCost as first sort dimension, followed by compute time
- No longer throwing an error if maxTimeMs is too low, instead returning the fastest timing