Add a query object that returns comparable sales for a given listing (same zip / square footage band / sale within last N months).
Pattern: follow `MarketSummaryQuery` and `PriceTrendQuery`. Use the shared `ListingScope` value object for parameter handling.
Likely signature:
```ruby
CompsQuery.new(zip_code:, sq_ft_total:, within_months: 6, range: 0.15).call
=> [{ mls_number:, sale_price:, sq_ft_total:, sale_agreed_at:, distance: }, ...]
```
Add a query object that returns comparable sales for a given listing (same zip / square footage band / sale within last N months).
Pattern: follow `MarketSummaryQuery` and `PriceTrendQuery`. Use the shared `ListingScope` value object for parameter handling.
Likely signature:
```ruby
CompsQuery.new(zip_code:, sq_ft_total:, within_months: 6, range: 0.15).call
=> [{ mls_number:, sale_price:, sq_ft_total:, sale_agreed_at:, distance: }, ...]
```