Implement damage absorption, battle test harness

Several bug fixes here as well.

Damage absorption wasn't actually possible to implement before due to
BattleUnit.takeDamage() clamping the damage at 1 on the low end.  Now an
enemy definition can specify a negative multiplier in its affinities to
be healed by the corresponding type of attack instead of damaged, or a
multiplier of 0 for full immunity.  For example, the Headless Horse will
be healed if attacked with Fire.

Also added a new test harness for battles, to allow the starting
parameters (party makeup, levels, inventory, etc.) for a test battle to
be customized without having to edit the gamedef or other components of
the engine.