battle_calcs: improve the caching system

Clean up the cache indices and add cache_this_move to some of the
functions.  This improves evaluation time in some situations
significantly.
battle_calcs.attack_rating(): add rating bonus for regenerating units
Fred: add rush zones at center and left, but don't use them yet

They are not yet balanced.
battle_calcs: new function approx_best_attack_combo

Returns the (approximately) best attack combination of a number of
attackers on a defender.
Fred: use the improved battle_calcs caching system
Fred zone holding: change method how villages are rated

Instead of a fixed bonus rating, we now count it as if it were an
improvement in unit defense.
Fred counter attack calculation: switch to using approx_best_attack_combo()

Use this to have to evaluate just a single counter attack combo,
instead of several.
!!! Note that this commit unfortunately also includes another change to
the battle_calc functions that is done in the next commit, so this one
will not run by itself.
battle_calcs.attack_combo_stats(): change return values

It makes more sense in this order; also add attacker and defender rating
Fred: if moving units out of way, do so toward AI leader
Fred: some cleaning up of comments and debug messages
Fred: another instance of using the new battle_calcs cache system
Fred: comment out unused conditional
Fred attack eval: do not use hard-coded chance-to-die condition
battle_calcs: revamp the attack rating system

The basic rating system remains the same, but it really needed to be
able to deal with attack combos (which it does now).  For example,
villages or regeneration was counted multiple times in attack
combinations.
This also includes pulling the calculation of att_stats and def_stats
out of get_attack() and a bunch of other related but not separable
changes.