lsp: emit UTF-16 columns in every LSP range master
LSP character columns count UTF-16 code units; the parser's positions count runes. They diverge on astral-plane characters (emoji, non-BMP CJK), which encode as surrogate pairs, so any such character before a token on its line shifted every outgoing range one column short: go-to-definition underlines, rename edits, highlights, document symbols, folding, links, diagnostics, and semantic token spans (whose lengths were byte counts). Every range builder now converts through the file's mapper (toLSPPosition/toLSPRange on the ParsedFile): nodeRange, tokenRange, nameRange, spanRange, syntaxErrorToDiagnostic, and the semantic token encoder. The mapper already handled incoming positions (resolveTarget); outgoing ranges went through bare Col-1 math. Tests are red-first (utf16_test.go, K-On themed): each fixture puts an emoji before the token of interest so rune and UTF-16 columns diverge, and pins definition, document symbols, semantic tokens (comment length and keyword column), parse-error diagnostics, links, folding, and rename edits to the UTF-16 column.