Patch 5.0.4/API changes

== Breaking changes ==
* Functions pertaining to talents and specializations are renamed:
*: GetActiveTalentGroup → (NB: player character-only)
*: SetActiveTalentGroup → 
*: GetNumTalentGroups → 
*: GetPrimaryTalentTree → 
*: GetUnspentTalentPoints → 
*: GetNumTalentTabs → 
*: GetTalentTabInfo → 
*: GetTalentTreeRoles → 
* Many party/raid-related functions and events are merged into group variants.
*: IsRaidLeader, IsPartyLeader, UnitIsPartyLeader → 
*: IsRaidOfficer, UnitIsRaidOfficer → 
*: GetNumPartyMembers, GetRealNumPartyMembers → 
*: GetNumRaidMembers, GetRealNumRaidMembers → (NB: non-0 in any group, including parties; use to check for group type)
*: RAID_ROSTER_UPDATE, PARTY_MEMBERS_CHANGED → 
* Functions pertaining to Real/Fake groups (home realm and instance/battleground-specific groups, respectively) are removed. Instead, group functions take an argument specifying which group you want to query:
** LE_PARTY_CATEGORY_HOME will query information about your "real" group -- the group you were in on your Home realm, before entering any instance/battleground.
** LE_PARTY_CATEGORY_INSTANCE will query information about your "fake" group -- the group created by the instance/battleground matching mechanism.
* Achievement API:
*: GetAchievementCriteriaInfo split into two separate functions:
*:* By criteria order: (achievementID, criteriaIndex)
*:* By internal criteria ID: (achievementID, criteriaID)
* Other
** GetDungeonDifficulty → has a new return value.
** SetDungeonDifficulty → has a new argument value.
** LootSlotIsItem → 
** The SPELL_CAST_SUCCESS sub-event of no longer fires for spells with cast times.
** has new return values.
** has new return values.
** has new return values.
== New functionality ==
* Pet battles
* Black market auction house
* Class specializations
* Challenge modes
* Upgrading items
* - Now returns a MapID as its 8th result, allowing addons to identify the current instance/continent without relying on localized names.
=== Macros ===
* New macro conditionals: 
:; [petbattle] : True when the player is participating in a pet battle.
:; [possessbar]
:; [overridebar]
:; [extrabar]
=== Talents ===
* CHANGED - Returns information about talents for player/pet/inspected unit/arbitrary classes.
* NEW - Returns maximum level-appropriate talent tier.
* NEW - Returns whether a talent is not selected in a given tier, and the selected talent's ID.
* NEW - Learns specified talents.
* NEW - Returns information about the cost of unlearning a single talent.
* NEW - Unlearns a single talent.
=== Unsorted ===
* has new return values.
* has new return values.
=== Widget API ===
* NEW ("event", "unit1"[, "unit2"]) - Triggers the widget's OnEvent handler when the specified event occurs for the specified units.
* NEW (enable) - Enables or disables the widget (available for any widget with Enable/Disable methods).
* NEW (show) - Shows or hides the widget (available for any widget with Show/Hide methods).
== FrameXML ==
* UIPanelButtonTemplate2 is renamed to UIPanelButtonTemplate; the old version of which is removed.
* The minimap buttons MiniMapLFGFrame and MiniMapBattlefieldFrame is renamed/merged to QueueStatusMinimapButton.
* ShapeshiftBarFrame is removed; druid shapeshifting UI is now handled by the StanceBarFrame.
== Observed bugs and notable differences ==
* - the new version of UnitIsRaidOfficer returns false if the player is leader. The old function returned true.
* - when not in a party/raid, the new version of UnitInRange returns false for "player" and "pet". The old function returned true.
* - If the path passed into Texture:SetTexture(path) is invalid, the texture will display as solid green.
* - If the path passed into Texture:SetTexture(path) is invalid, Texture:GetTexture() will still return whatever was passed in. Previously, it would return nil if the texture path was invalid. It seems that it is no longer possible to determine if a texture is valid or not (useful for validating user input).
* - requesting the GUID of another party member (possibly raid too - not tested) while responding to the new event during initial UI load while you are already in a group returns nil. This was not previously the case with the old and events.
* / ENVIRONMENTAL_DAMAGE - the environmental type reported from this event is now reporting non-localized proper case strings (e.g. "Falling") instead of non-localized capitalized strings (e.g. "FALLING").
== Automated diff ==
Click on the headers to expand the tables below.