Store pointer to head & tail rather than head and size.

This decouples reads from the beginning and writes
to the end.  Should eliminate the need for interrupt
locking.