PICARD-575: load plugins from contrib/ too when run from source directory

http://tickets.musicbrainz.org/browse/PICARD-575
addrelease.py: Refactor AddClusterAsRelease.

Abstract out some of the functionality all clumped together in
AddClusterAsRelease.callback() to methods of new parent class
AddObjectAsEntity.
addrelease.py: Abstract .callback() to parent class.

Child classes now just need to define object type, NAME, and the
set_form_values() method - and reigster_*_action.
addrelease.py: Abstract out submission URL.
addrelease.py: Add AddFileAsRecording class.

Allows for easily adding individual files as standalone recordings.
addrelease.py: Add AddFileAsRelease class.

Allows for easily adding single files (which can't be clustered) as releases.
addrelease.py: Update plugin metadata.

- Add Freso to PLUGIN_AUTHOR
- Update PLUGIN_NAME and _DESCRIPTION to describe added file
  functionality.
- Increment PLUGIN_VERSION to 0.5.
addrelease.py: Improve PEP8 compliance (E701).

Fixing instance of error E701: multiple statements on one line (colon).
addrelease.py: Revert change to PLUGIN_NAME.

Per nikki's comment on pull request #271:
https://github.com/musicbrainz/picard/pull/271#discussion_r11242854
addrelease.py: Define form_values in __init__().

See https://github.com/musicbrainz/picard/pull/271/files#r11352974
addrelease.py: Use approximated "~length" for Recordings.

Recordings don't support sub-second time precision, so the
track.metadata.length used for the two Add...AsRelease classes will
cause an error on /recording/create's "length" field.
track.metadata["~length"] contains the time converted to mm:ss format
and will not cause the error on /recording/create, so this commit
changes AddFileAsRecording to use that.
Add `update_constants` command to setup.py

It retrieves and parses attributes.pot and countries.pot files
from transifex to extract various constants needed in Picard.
It helps to keep those in sync with MusicBrainz website.

It then generates:
- picard/attributes.py containing cover art types, medium formats, and release group types
- picard/countries.py containing countries

`update_constants` command replaces `update_countries`
Update picard/attributes.py and picard/countries.py

New setup.py update_constants command was used.
Add ugettext_attr() function needed to translate attributes

Since contexts are used in attributes.pot, and python gettext do not yet
support contexts, a minor hack is used to make it work, this workaround
is used in django and babel, see ugettext_ctxt().
Build RELEASE_FORMATS and CAA_TYPES from MB_ATTRIBUTES
Ensure proper translation of cover art types
Build RELEASE_PRIMARY_GROUPS and RELEASE_SECONDARY_GROUPS from MB_ATTRIBUTES
Build release type score sliders UI dynamically.
Convert `release_type_scores` option to `ListOption`

We had a space-separated list of name,value tuples ("Album 0.5 Other 0.4"),
and two helper functions to load and save data in the correct format
(`load_release_type_scores` and `save_release_type_scores`).

Since option is converted to recently-introduced ListOption, data is now saved
as a list of tuples, eventually converted to dict when needed.
It simplifies code, and also prevents an issue if it comes we have a release group type
with a space in its name.

An upgrade hook was added to handle this change on Picard upgrade.
Update NEWS.txt