Release v0.4.20: filter_predicate + CYCLE detection

Features:
- filter_predicate on NodeMapping: Map multiple graph labels to the same
  base table using a discriminator column filter. Injected on reads at 5
  sites; writes skip it. Supports YAML config.
- CYCLE clause for PostgreSQL recursive CTEs (14+): Prevents infinite
  loops on cyclic graphs. Body filter adds NOT is_cycle alongside depth
  guard. Optimizer preserves cycle_columns through all passes.

Tests: 26 new tests across 4 files. All 632 Cypher + 134 SPARQL passing.