[querying] use argmax + _deleted filtering in all graph queries
### Problem to Solve
Graph node tables use `ReplacingMergeTree(_version, _deleted)`, which deduplicates rows during background merges. Between merges, queries can return multiple row versions for the same entity and rows that have been soft-deleted (`_deleted = true`).
This means any query against a node table can:
- Return duplicate rows for the same entity (one per version)
- Include soft-deleted entities in results
- Return stale property values from older row versions
These issues affect all query types: search, traversal, aggregation, neighbors, path finding, and hydration.
### Proposed Solution
Apply query-time deduplication across all graph query paths using `argMaxIfOrNull` and `_deleted` filtering. For each entity, pick the latest version by `_version` and exclude soft-deleted rows, ensuring queries always return correct, deduplicated results regardless of background merge state.
### Merge Requests
- !708 - `feat(compiler): row deduplication for node tables using LIMIT BY`
- !785 - `fix(profiler): query system tables via clusterAllReplicas` (tooling prerequisite)
- !786 - `fix(compiler): only push sort-key filters inside LIMIT BY dedup subquery`
- !787 - `feat(compiler): use argMax dedup for _nf_* CTEs instead of LIMIT BY`
- !788 - `fix(compiler): apply argMax dedup to hydration queries`
issue