Sereal encodes back-references to items previously seen with a tag plus offset into the buffer of the original item.  Changing idx here and below breaks those offsets, since the new buffer doesn't have the included header.  I think in C-land they're fun pointer tricks to handle this, but we can't do that here.

Two options: 1) don't change idx (which means copying the buffer)
                   2) when we move to the decoder object with options, we can store the offset adjustment there.

I'd say just go with (1) for now and we can move to (2) when we actually implement the encoder objects.