Cool! I benchmarked your original version and it didn't notice obvious
regressions.

I noticed rb_check_id_without_pindown still takes a volatile arg. Is
this for GC-safety? Can we encourage RB_GC_GUARD instead for new APIs?
volatile is not always enough, and tends to generate bad code. I
realize this was probably for consistency with the old rb_check_id
function.