Store source ranges rather than just start positions.

Good, helpful error reporting requires AST nodes and their derivatives to
have full ranges defined, rather than just start positions. This is a
move in that direction. There's still some legacy laying around that will
treat these as just being positions, but moving forward all new code will
use ranges via the new types and interfaces introduced in alamatic.scanner.