Refactor to move all the offset-munging into BlockLine
Refactor to move all the offset-munging into BlockLine

This reduces the number of lines where we need to do fiddly
error-prone position conversion, while still saving us from the
quadratic blowup.

glennhickey/hal,glennhickey/hal,glennhickey/hal,glennhickey/hal,glennhickey/hal,glennhickey/hal,glennhickey/hal,glennhickey/hal