CLN/WIP: use conditional nogil
This is largely an experiment to see how much code we could de-duplicate once cython 0.30.0 comes out and conditional `with nogil` becomes available.  Its a decent amount, less than I'd expected.

Hopefully this can help cython kick the tires.
@WillAyd anywhere else I missed where we can rip out code using conditional nogil (zero hurry).  I'd be interested in your thoughts on the apparently-untested TIEBREAK_FIRST/object code path.

@pilkibun IIRC #27373 was a proof of concept for things we could clean up once cython 0.30.0 is out.  Any other suggestions? Still interested in thoughts from @WillAyd and @pilkibun (see previous comment), but this PR was just a proof of concept, so closing. Yep sorry; great idea but admittedly didn't put a ton into review - waiting for Cython to actually release first @WillAyd the part that I thought you'd be interested in is that we don't have any tests that go through the TIEBREAK_FIRST/object path.  I'm hoping we can either a) un-disallow that and not raise mid-loop or b) raise up-front pre-loop.  Pinging you on it is based on a vague recollection that you had worked on it before. Hmm maybe I just forgot but don't recall touching the algos code (did something similar in groupby)  so maybe don't fully grasp the context but from glancing at it your suggestion to raise outside of the loop seems logical