Order releases table on /cdtoc/ pages like on other pages which list releases
Don't ISE trying to sort invalid dates.
Implement some core entity model methods via %ENTITIES

This adds a "_type" method to core entities' models, which returns the
entity type name, and adds a "mbid/multiple" flag to %ENTITIES for
entities that may have multiple MBIDs (via redirection). Together,
this allows for implementing the "_entity_class", "_table", and
"_gid_redirect_table" methods in Data::CoreEntity, in a generic form.
The individual implementations in Data::Area, Data::Artist etc. are
accordingly removed.
Merge branch 'beta'

* beta: (58 commits)
  silence another warning about undefined values
  Silence a few warnings about uninitialized hash values.
  Un-inline code from the Unicode::Encoding plugin
  Support newer JSON decoders that produce JSON::false values instead of the string 'false', in WS::js::Release test.
  Fix up a variety of tests.
  Fix an "uninitialized value" warning
  Get rid of an unncessary list
  MBS-7916: Fix "Set track durations" preview
  MBS-7915: Show tracklist on "Set track durations" page
  Remove unused search template
  Add alt tags to images which are missing them
  Don't require a disc ID in /ws/2/discid/ when a TOC is provided (MBS-3725)
  Use existing editor data in place tests
  Use "limit=max" for MediaWiki API requests
  Reorganize the string cleanup functions
  Fix tests for Perl 5.20
  Fix index update script
  MBS-7831: Order "Votes by (editor)" list by time of vote
  Update translations from transifex.
  Update pot files using current code and production database.
  ...
More sanity checks for medium edits

Add sanity checks to "Add medium" and "Edit medium" edits to make sure
the new tracklist only uses track IDs that currently belong to the
medium (i.e. none in the case of "Add medium"), because otherwise the
edit may cause tracks to be stolen from unrelated mediums. (Perhaps
related to MBS-7846.)
Use entity property mbid/multiple for statistics

The statistics collector for the total number of MBIDs (ab)used the
mbid/relatable property to identify entities with MBID redirection
tables, missing tracks. Use mbid/multiple instead.
Don't create entities that are then not used
Factor out "insert" for core entities

The various core entities have similar insert methods. Turn these into
one common method in MB::S::Data::CoreEntity that provides a few
hooks for entity-specific code.
Make "insert" for core entities return a hash

The "insert" method for core entities used to return an incomplete
object, whose only purpose was to hold the ID and MBID of the newly
created entity. Use a more lightweight hash instead.
Remove some unnecessary imports
Remove an unused method
Escape the no AcoustIDs message on the fingerprint tab (MBS-7927)
Escape the other strings which get embedded into the JS too
MBS-7928: Follow change of search server response format

The recent search server release changed top-level list elements in
responses to consistently be in plural form, e.g. "recordings" instead
of "recording" (SEARCH-383). The release editor still expected the old
(singular) form, however, so it interpreted all recording searches as
returning nothing.
Merge remote-tracking branch 'chirlu/mbs-7928'

* chirlu/mbs-7928:
  MBS-7928: Follow change of search server response format
Merge remote-tracking branch 'chirlu/core_entity_insert' into beta

* chirlu/core_entity_insert:
  Remove an unused method
  Remove some unnecessary imports
  Make "insert" for core entities return a hash
  Factor out "insert" for core entities
  Don't create entities that are then not used
  Use entity property mbid/multiple for statistics
  Implement some core entity model methods via %ENTITIES
Merge remote-tracking branch 'nikki/templates-cdtoc-releases' into beta

* nikki/templates-cdtoc-releases:
  Order releases table on /cdtoc/ pages like on other pages which list releases
Merge remote-tracking branch 'ian/date-no-ise' into beta

* ian/date-no-ise:
  Don't ISE trying to sort invalid dates.
Merge remote-tracking branch 'chirlu/medium_sanity_checks' into beta

* chirlu/medium_sanity_checks:
  More sanity checks for medium edits
Merge remote-tracking branch 'nikki/mbs-7927' into beta

* nikki/mbs-7927:
  Escape the other strings which get embedded into the JS too
  Escape the no AcoustIDs message on the fingerprint tab (MBS-7927)