[ty] Fulfill language-server requests against closed documents (#28595)
## Summary
This allows language-server clients to request document symbols, hover
information, and other document features without first sending
`textDocument/didOpen`. Requests can target local files within workspace
folders or configured import search paths, as well as cached copies of
ty's bundled typeshed stubs. This includes files excluded from type
checking (e.g., through
[`src.exclude`](https://docs.astral.sh/ty/exclusions/)).
Fixes https://github.com/astral-sh/ty/issues/3624.
## Approach
Existing request handlers can now read closed documents through the
selected project's database without registering those documents as open.
Additionally:
- Open documents continue to use the client's text, including unsaved
edits.
- Requests against closed documents preserve the existing diagnostic
policies and do not add files to the set selected for type checking. For
example, `openFilesOnly` mode returns no diagnostics for closed
documents.
- Unopened notebooks remain unsupported because the client supplies
their cell URIs and position mappings.
## Test Plan
See included tests.