Abstract max and min, maxWith and minWith to helpers

Obviously slight (probably inlined function call) perf hit but it's going to be much better than it was last revision and kills some redundancy. `min` and `max` may also perform better for some edge cases with a slow `valueOf`
crap, we should probably take an init value to return in this case here as well, to stay consistent with the `max/min` contracts. i'll pull this as is and fix it later, 'cuz that defect isn't your responsibility