Make decode_one_follow smarter when handling offset_to_next

When the pointer points to a non-compound (array/map) value, the next value is
the one after the pointer itself, not the one after the thing the pointer
points to. However, with compound values, the next value is the one after the
(pointed to) compound value.

All of this still seems a bit gross. There's probably a better way to refactor
all of this that I'm not seeing.