Implement Assurance.

More thought needs to be put into lastHitBy. Is lastHitBy set if an
attacker uses a non-damaging move? If so, moves like Assurance and
Counter can get rid of non-damaging move checks. If not, we need to
ensure that this assumption is always checked.