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.
can you factor out these complex copy_memory calls?:

```

    #[inline]
    fn memmove(&self, dst: uint, src: uint, len: uint) {
        unsafe {
            debug_assert!(dst + len <= self.cap, "dst={} src={} len={} cap={}", dst, src, len, self.cap);
            debug_assert!(src + len <= self.cap, "dst={} src={} len={} cap={}", dst, src, len, self.cap);
            ptr::copy_memory(
                self.ptr.offset(dst as int),
                self.ptr.offset(src as int) as *const T,
                len);
        }
    }

    #[inline]
    fn memcpy(&self, dst: uint, src: uint, len: uint) {
        unsafe {
            debug_assert!(dst + len <= self.cap, "dst={} src={} len={} cap={}", dst, src, len, self.cap);
            debug_assert!(src + len <= self.cap, "dst={} src={} len={} cap={}", dst, src, len, self.cap);
            ptr::copy_nonoverlapping_memory(
                self.ptr.offset(dst as int),
                self.ptr.offset(src as int) as *const T,
                len);
        }
    }
```