Extract the per-line lookup index from DecorationService into an exported
DecorationLineCache class in the same module, with DecorationService listed
first for readability.
Optimize buffer insert/delete maintenance to shift map keys in O(unique
indexed lines) instead of full re-indexing every affected decoration. Only
multi-line decorations that span the mutation point get a full re-index.
Add a direct DecorationLineCache unit test in DecorationService.test.ts.
Co-authored-by: Cursor <cursoragent@cursor.com>