pub fn line_diff(old: &str, new: &str) -> Vec<DiffLine>
Return a structured per-line diff.
Each line includes the change tag, old/new line numbers, and content.