New damage tag system, getInfo() optimization

BattleUnit.takeDamage() now takes an additional 'tag' parameter which
allows statuses to handle different types of damage separately; changed
behavior of isPriority parameter to not call statuses at all for
priority effects. Also fixed massive lag while selecting moves due to
move predictor requesting battler info many times per call.  The info is
now rebuilt once per cycle and then cached.