Ability refactor - Abilities now receive End events properly

Fixed up setAbility to send End events to abilities, ~~and added a new
function canSetAbility so Skill Swap and other moves can properly check if
an ability can be set without resorting to purposefully getting false on
setAbility (especially for Skill Swap).~~

Fixed up the order of events fired off in Skill Swap to the correct order,
first firing off both End events, then both Start events, with the Pokemon
that used Skill Swap activating its ability first.

Fixed up the primal weathers to properly use the new End events.

Moved checks on switching and fainting from the weather into the ability
so that they can properly interact with Air Lock and Cloud Nine.
The gen check is weird as there is no mechanic for DPP+ only that can be associated to the <code>End</code> event triggering.