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.
I'd recommend running the `End` event during switch-out and fainting, instead of having this code repeated three times. Unless there's a good reason not to?