Reassign responsibility for string interpolation.

The lexer will now emit begin and end tokens for interpolation. This
allows more complex interpolation expressions (using same quotes as
surrounding string, for example).

If the lexer can ensure that these tokens will always be emitted
balanced, then the parser's duties are simplified. Not sure if adding
this contract to the lexer's behavior is pure, but it seems to be a good
way to organize it for now.