Adjust _tokenEnd when buffer is refilled

When buffer is refilled and shifted, all internal pointers to the buffer
need to be adjusted, including the _tokenEnd, which together with
_start, points to the location of the token in the buffer.