This allocates a brand new buffer. You should be able to just copy the bytes around in the current one, although this will undoubtedly require `unsafe` code.

Granted, this appears to be how `shift_byte()` is implemented. It would be nice if you could fix that too to not be unnecessarily inefficient.

```rust
let len = self.len() - next;
unsafe {
    ptr::copy_memory(self.vec.as_mut_ptr(), self.vec.as_ptr().offset(next as int), len);
    self.vec.set_len(len);
}
```