Overhaul the stat system and implement chaining

onModifyStat events now alter the returning modifier instead of
affecting the stat directly