Abilities Revamp

Overhauled the way UsableAbilities are structured.

Where previously the different stages of an ability were hard-coded into
the abilities system, the UsableAbility class now stores a list of
AbilityStage objects, which describe animations, Effects,  particle and
sound effects, cast times, and whether the ability initiates combat with
the target on a per-stage level, rather than those things being stored
directly in the UsableAbility.

AbilityStages are processed sequentially by the AbilitiesComp of the
caster. The AbilitiesComp, as well as the AbilitiesCompManager, are now
updated every frame by the BaseGame, however AbilitiesComps are only
updated if they are tracking an ability stage with a timer associated
with it. A stage's length may also be controlled by its animation, so
the AbilitiesComp now also inherits from AnimListener.

AbilityStages can be added to a UsableAbility in any combination, making
the potential behaviours of abilities much more complex and varied.

This update also made some readability improvements to the
PlayerCtrldComp update functions, removing a large number of nested
'if's, as well as to the AnimManager's running update function.