[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