added inner class 'NonVolatileReader' which allows random access reading from a RingBuffer without having to worry that read space could get freed by access operations