ENH add an introsort implementation

This is an implementation from the pseudo-code in Musser's paper.

I haven't done any performance testing, no doubt there is optimization to do here e.g. `@inbounds` and something better for `index_of_median_of_three` (which atm is terrible)...