add MoveItems to RingBuf, fixes  #19085

r? @huonw @csherratt
Offsets like these are used fairly pervasively throughout `slice` and `Vec`. If this is wrong, we're standing on a very shaky foundation. I've asked about this before in IRC before and the general consensus is that it's safe to offset a junk zero-sized-pointer. I have an intuition to the effect of "this code gets completely stripped away in compilation, so offset is never actually called", but I might be wrong. 

cc @thestinger @huonw