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.