This is a ring buffer intended for use in pub-sub applications.
That is, a single publisher writes items to the buffer, and
multiple subscribers can read items from the buffer.
When a write to the fixed-size circular buffer overflows,
the oldest items in the buffer are overwritten.
Reading items from the buffer does not remove them from the buffer
(as it would from a Queue): instead,
Subscribers use ReadTokens to track which items they have
already read, and use nonblocking read to read the next available item.