Good ideas. A couple ideas for organizing and simplifying:
1) Tags governing relationships with other creatures (HUNT, ALLY in particular) should refer to classes of creatures, not specific ones -- the number of possible interactions grows exponentially with the number of creatures, so you can't afford to specify each one explicitly. Creatures could be grouped much as the symbolic language raws group words. Two equivalent ways of doing this: creatures can declare their own group memberships (deer have a [GROUP:PREY]) tag, or an externally defined raw entry groups the creatures (deer included as one of the creatures in [CREATURE_GROUP:PREY]). You could still define groups with only two creatures to preserve the goblin-troll partnership or whatever. This also avoids the problem of what happens with a non-mutual ally relationship.
2) More or less cosmetic, but many of your tags could instead function as various tokens for a single tag. For instance, rather than separate tags for [HOVER], [LEDGE_CLIMBER] and [WALL_CLIMBER], you could use [MOBILITY:HOVER], [MOBILITY:LEDGE_CLIMBER] etc. This makes it easier to keep related information together. The creature raws are a giant mess right now due to the hundreds of scattered tags.