Warhead cleanups

This removes the remaining redundancy and floating point calculations from the warhead damage calculations.

The following are left for a future PR:
* Remove the redundant legacy "0% = no targeting" assumption.
* Remove the PerCellDamageWarhead type (which is bogus, and only used by the crate nuke weapons that we forgot to update when fixing the real nukes).
I will update SpreadDamageWarhead to support non-uniform steps.  If you really do want a staircase-style spread then you can define a spread like `1c1, 1c2, 2c8, 2c9` so that the interpolation between values occurs within a single world-unit.