Add weighted zonal stats support to ZonalEngineExactExtract

Summary

Implement weighted_zonal_stats() in ZonalEngineExactExtract using exactextract's built-in coverage fraction weighting, replacing the current NotImplementedError.

Context

exactextract handles large datasets natively with bounded memory (feature-sequential and raster-sequential strategies, max_cells_in_memory parameter). Its coverage fraction weighting is sufficient for our use cases, making the custom vector-based weighted stats in ZonalEngineSerial, ZonalEngineParallel, and ZonalEngineDask unnecessary.

This is part of a phased deprecation:

  1. Deprecation warnings added to legacy zonal engines (done in prior MR)
  2. This issue: implement weighted stats in exactextract
  3. Future: remove legacy zonal engines entirely

Acceptance Criteria

  • ZonalEngineExactExtract.weighted_zonal_stats() returns results using exactextract's coverage fraction weighting
  • Output format matches existing weighted zonal stats output (GeoDataFrame with same columns)
  • Tests covering continuous and categorical weighted zonal stats
  • Update deprecation warning message to confirm weighted stats are available in exactextract engine

References