SI-7325 cleans up corner cases of percent handling in StringContext.f

See comments in code for the exhaustive list of the cases handled.
Also note that treatment of non-formatting percents has been changed.
Embedding literal %'s now requires escaping.

Moreover, this commit also features exact error positions for string
interpolation, something that has been impossible until the fix for
SI-7271, also included in this patch.
literal() now assigns a position to the tree it produces

At all its callsites except for a single one, the results of literal()
were wrapped in atPos(in.offset), so the simplification was pretty much
warranted. Thanks @paulp