AST adds precise details for nodes and positions.

This change adds node types, and in a couple cases where rewrites
result in lost token position information, it adds references to
the original tokens.

It is used by the visual block editor at pencilcode.net.