Improve damage tagging system

takeDamage() now takes an array of tags instead of just one; affinity
system updated to use damage tags, allowing affinities to be handled
entirely in the battle engine instead of cluttering the gamedef with
code for such basic functionality...