perf(canopy-persons): household-scoped income endpoint to reduce N+1 round-trips

Today canopy-web fetches income per-member when rendering the household income tab, producing N+1 HTTP round-trips to canopy-persons for households with many members.

Add a household-scoped endpoint (e.g., GET /v1/households/{id}/income) that returns income rows for all members in one call.

Deferred until profiling shows the N+1 actually matters in production — filed so future contributors know the pattern was anticipated.

Extracted from canopy-web-persons-wiring.adoc § Potential Improvements.