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.