Implement insert for RingBuf

This is a first pass at insert on RingBuf. I tried to keep it as simple as possible. I'm not sure of the performance implications of doing one copy vs. copying multiple times but moving a smaller amount of memory. I chose to stick with one copy, even if the amount of memory I have to move is larger.

I believe this is part of #18424 

@Gankro mentioned this was missing.
I believe a wrap_index here is unnecessary here based on context (tail is wrapped, moving it to the left by one can't possibly make it underflow the array bounds). This fact should be documented, though.