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.
There's quite a few 0-len, 1-len and `cap-2`-len cases to handle as well, I imagine.

I'd favour something like testing every single valid ringbuf configuration for cap = 8. All lens (0 to 7), and all tail positions (0 to 7). Only 64 tests, not too bad.