Fix #39.

That was a hard one, and yes, it did require more architecture changes :)
But I’d like to think that these are good changes, and that token is
actually a bit nicer now than before.

Instead of charPositionInLine and alignSkip, which were used only in
writeToken to construct sourceColumn and targetColumn, we now save
sourceColumn and targetColumn directly in the token. targetColumn is
lazily evaluated (Integer() instead of Integer) because it obviously
depends on the state of the writer (more specifically, the
countingWriter) right before the token is written. For string templates,
we also keep a stack of column pairs because later parts of string
templates are still aligned to the columns of the first part.