feat(features): the resolver's own hit count, ready to replace Alpha Strike
`ClusterGrouping.expectedHits` asks `WeaponHandler.calcHits` once per 2d6 total with the dice pinned and averages over the curve. An LRM 20 comes back 6 6 9 12 12 12 12 16 16 20 20 - the Cluster Hits Table's row for a rack of twenty - and a Streak SRM 6 comes back six at every roll, which is the check that proves it is the resolver and not a table. Damage: LRM 12.69 for Clan and Inner Sphere alike, Streak 12.00, SRM 8, AC/20 20, Medium Laser 5. Not switched on. Doing so moves the library sweep's silently-zero column from 44 to 985: `calcHits` returns zero rather than throwing for Inferno, Incendiary, Fragmentation, Dead-Fire, Smoke, Thunder and Mine Clearance rounds in a synthetic attack, and a refusal must not become a damage figure. Declaring them instead moved 4,193 pairs and is plainly too far, because Thunder and Incendiary do deliver damage. The epic records the two ways to unblock it. Also fixes a silent zero of my own: `reach` looks up a no-argument method and `calcHits` takes a vector, so the miss arrived as a hit count of zero.