Fix MP3 encoding

Gstreamer's encodebin creates variable bitrate MP3 files without an
Xing header (bug 649841) which means their length and bitrate are
misreported. Fix this by making MP3 a special case with our own
pipeline and element checking rather than using encodebin.

https://bugzilla.gnome.org/show_bug.cgi?id=675275
Add instance pointer to MusicBrainz callbacks.

To use the artist alias information for composers sometimes we're
going to need to do a query from one of the callbacks and cache the
result. Add an instance pointer to the callbacks so they can access
the cache and MusicBrainz query object.

https://bugzilla.gnome.org/show_bug.cgi?id=723297
Print MusicBrainz errors.

Add a convenience function for performing MusicBraniz queries and
print a warning if there are any errors.

https://bugzilla.gnome.org/show_bug.cgi?id=723297
Cache MusicBrainz artist details.

This will avoid performing unnecessary composer alias queries and
scanning an artist's alias list more than once.

Remove 'joinphrase' from ArtistDetails structures to enable caching
just one ArtistDetails per artist. Create ArtistCredit structure to
hold the join phrase and an ArtistDetails* when creating artist
lists. Remove the artist lists from AlbumDetails and TrackDetails
structures as they are only used to generate the artist text and not
having them simplifies things a little.

https://bugzilla.gnome.org/show_bug.cgi?id=723297
Use artist cache for composers.

MusicBrianz only returns artist name, sortname & id for
work-level-rels so we need to perform another query if we want the
alias list. Cache the result so the query only needs to be performed
once per composer.

https://bugzilla.gnome.org/show_bug.cgi?id=723297
Use localized artist aliases from MusicBrainz.

MusicBrainz returns artist names in their native locale so it returns
"Пётр Ильич Чайковский" instead of "Pyotr Ilyich Tchaikovsky" but
provides localized versions of the artist name as aliases. Use the
alias so we get "Pyotr Ilyich Tchaikovsky" in English locales and
"Piotr Ilitch Tchaïkovski" in French locales etc.

Although GLib supports fallback locales we do not use them as
MusicBrainz does not provide locale information for the canonical
artist name, only it's aliases. This means that it is not possible to
fallback to other locales as the canonical name may actually be in a
higher priority locale than the alias that matches one of the fallback
locales.

https://bugzilla.gnome.org/show_bug.cgi?id=723297
Fix mnemonic widgets in preferences dialog

The drive and profile comboxes were missing mnemonic widgets. The
profile combobox was not in the builder file (this was a legacy from
gnome-media-profiles) so fix this as well.

Expand the drive combobox so it is the same width as all the others.
Save & restore window size & state

Save the window size and state when quitting and restore it on
start-up. The state is saved in the xdg user config directory.