Ringbuffer uses sizes rather than masks in API.
Clarify what the safe/unsafe versions of ringbuffers are doing.
Change usart code to use sizes as well.
Closes #38