An alternative Serial Library for Arduino 1.0

I try to fetch [the volatile head and tail pointers] once and use a local variable like h or t.

Yes, I noticed. That usually works pretty well, as long as there are enough registers to keep the locals in registers (which there are; it just doesn't seem to do a good job of picking which registers in this case. This is complicated by the fact that the AVR only has two full-featured index registers, despite the claims to "32 general purpose registers."