I wrote LibSpellRange-1.0 a while back for this exact purpose - IsSpellInRange() has been broken for a while. Servers are down right now on beta so I can't test it to be sure, but it should still work correctly.
http://wow.curseforge.com/addons/libspellrange-1-0/
It doesn't implement SpellHasRange() because, frankly, I never even knew that function existed since I never had a need for it. I'll look into implementing SpellHasRange as well.
Edit: It now also implements SpellHasRange as of r11.