Tweaked statuses/ability generation/team generation

Lots of stuff in this one, feel free to use older commits if you'd like. Listing what was changed in each commit:

1. 901382e There was a case where Fire Blast and Lava Plume were legal together, even though they are fairly similar moves and both have a chance to burn.
2. f5e4621 Slightly adjusted rules governing conflicting statuses -- Toxic and Spore are now illegal together, for example. The case Toxic and Will-o-Wisp has a 50% chance to be rejected because some Pokemon like to run both in order to hit Steel-types.
3. 7d0fc4c The `randomSet` function can now take an optional `team` parameter consisting of an array of Pokemon on that team. This is used to determine if any other Pokemon on the team is a weather inducer, which affects the moves and abilities allowed to be used.
    * Also in the above commit: things like `contraryMove` are no longer hardcoded, but instead determined at runtime: a move is considered a valid Contrary move, for example, when it drops stats, but does not raise any. Hopefully that'll ever-so-slightly ease the transition to Gen VI.
4. bae4f4a Small correction to the above commit.
5. ada3eb9 The team generation now additionally looks for weaknesses to any one particular type. This was inspired after getting 2 Flying-types and 2 Water-types against 2 Electric types and getting completely demolished. Now, team generation *tries* to limit the number of Pokemon which are weak to any one type. How strict it is about removing Pokemon is determined by `if (typeWeaknesses[t] > i)`, where `i` is the maximum number of Pokemon that are allowed to be weak to that type. Typically, 0 is too strict and 2 rejects only the worst cases. It's currently set to 1; feel free to adjust it as you see fit.
    * Perhaps there should be a chance to keep the Pokemon anyway, even if it makes us weak to a type? I don't *see* any real reduction in randomness (if `i` is 1 we usually reject about 4-7 Pokemon per side; if `i` is 2 we usually reject 0-3), but considering how we have a small chance to keep Pokemon elsewhere even if they cause issues, perhaps there should be a check included here as well.
6. 5e74173 The algorithm that avoided weaknesses used to ignore weather inducers; this made it so Pokemon with weather abilities were no longer exempt.
7. f5995f1 There was a minor bug from a commit from the other day where the `types` array wasn't being sorted before the unique type combinations were logged; `Water/Flying` and `Flying/Water` were considered to be unique type combinations. `types` now has `.sort()` called on it before the array is joined.
8. 2fdb5ec This commit was largely overwritten by the commit directly afterward; it tried to do the same thing but in a different way.
9. 4ed1932 Adjusted the ability generation to be more dependent on the moves a Pokemon has and -- to an extent -- its teammates. Abilities are now assigned a score similar to the one in `abilities.js`, only this score is based on the Pokemon's set. 
    * For example, a Pokemon with Chlorophyll will have a high score assigned to that ability if one of its teammates has Drought or Sunny Day, but a low score if it does not. A Pokemon with Poison Touch would have their score determined by how many contact moves they have -- if it's only 1 and they have another ability they can use better, they'll likely get the other ability.
    * In the event that two scores are the same, there's a 50% chance of choosing either.
10. 2e35e47 Merged with the main branch.
11. cf246a2 Solarbeam wasn't getting picked properly with Sunny Day.
12. 5e2c2a1 Minor fixes: Close Combat shouldn't get White Herb, removed commented-out ability code, there was a chance that the weather would be logged for the purpose of the weaknesses algorithm even if the weather inducer was rejected.
13. 538f397 Nosepass could learn Head Smash from an egg in Gen IV.
14. 8a6bfa0 Undid prior commit; there was nobody Nosepass could breed with that would allow Head Smash to be legal.