Mirror bit not modulo math

Rather than keeping an extra slot open and checking for full/empty buffers
using modulo math, I'm trying the alternative implementation using bits to
track the state of start and end.

Compare the two implementations here:

https://en.wikipedia.org/wiki/Circular_buffer#Always_Keep_One_Slot_Open
https://en.wikipedia.org/wiki/Circular_buffer#Mirroring