Fred attack eval: move identification of poisoners out of the loop

It requires a call to AH.has_weapon_special, which queries unit.__cfg,
which is very slow.
simulate_combat_fake(): don't fill empty HP chances with zeros

That’s what the wesnoth.simulate_combat() does, but is different from
the other functions in battle_calcs.  Only hp_chance[0] needs to be
set, even if it is zero.
attack_combo_stats(): also cache intermediate battle outcomes

Speeds up some calculations significantly.