MBS-6218: don't try to merge genders when merging into an artist of type 'group'
MBS-6635: Updated ReleasedTooEarly to work with release events
MBS-6635: Update the ReleasesToConvert report now that there is no tracklist table
MBS-6635: Update the SeparateDiscs report to use the release_country table
MBS-6635: Update the SuperfluousDataTracks report now that there is no tracklist table
MBS-6635: Update the TracksWithSequenceIssues report now that there is no tracklist table
MBS-4730: Do not show alias sort names when they equal the alias name

If an alias has a sort name that is equal to its name, then the
name column spans over the sort name column. This is primarily of
benefit for search hints, which currently always have a sort name
equal to the name (which is also enforced by the database).
MBS-6218: add test
MBS-6218: move group type to a constant
MBS-5863: Beginning of API to load work attributes

Adds Work->load_attributes, which can be called on works with no attributes.
MBS-5863: Add the ability to load free-text work attributes
MBS-5863: Add the ability to load finite-valued work attributes
MBS-4730: Refactor duplication out of components/aliases.tt
MBS-5863: Correctly load finite-valued work attribute values
MBS-5863: Add Work->set_attributes

Allows setting free-text and finite-valued work attributes for a given work.
MBS-5863: Add work attribute support to Edit::Work::Edit

Edit::Work::Edit now does the 'ValueSet' role for the 'attributes'
property, which allows it to have a list of attribute definitions.
When an edit is accepted, these attributes will be merged as a set,
much like IPI editing.

The Edit::Role::ValueSet class has been extended to take a higher
order function that is used to determine equality over properties
being merged. This wasn't necessary for IPIs as they are strings,
but attributes are richer structures. The hash function for attributes
is their canonical serialization to JSON.
MBS-6561: Deserialize the 'life-span' 'ended' property

Unfortunately due to SEARCH-316 we need to do a little bit more work
to deserialize this than should be necessary, by converting the string
representation of a boolean into a boolean.
Return a 400 error if a user tries to submit edits using /ws/2 without a confirmed email address.
Switch to exintro, wikipedia's API changed.
Merge branch 'master' into beta