Clean up offset tracking.
Reduce the number of places we modify 'offset' so that op_seek_helper() can always skip seeks to the current offset. The checks we were doing before already covered all the places where this was useful in the normal case, but this lets us centralize that logic. This commit also includes a few minor follow-ups to 9b57b0c2: * Use a smaller type for ret_size and initialize it. * Verify 'end' is at least as large as data we've already read.