Use a Distance object instead of floats for distance calculations.

The new Distance object knows how to perform various types of distance
calculations (expression, equality, number, priority, string).

It will keep track of each individual penalty that has been applied so
that we can utilise that information in the UI and when making decisions
about the recommendation level.

We now display the top 3 penalties (sorted by weight) on the release
list (and "..." if there are more than 3), and we display all penalties
on the album info line and track change line.

The implementation of the `max_rec` setting has been simplified by
removing duplicate validation and instead looking at the penalties that
have been applied to a distance. As a result, we can now configure a
maximum recommendation for any penalty that might be applied.

We have a few new checks when calculating album distance:

`match: preferred: countries` and `match: preferred: media` can each be
set to a list of countries and media in order of your preference. These
are empty by default. A value that matches the first item will have no
penalty, and a value that doesn't match any item will have an unweighted
penalty of 1.0.

If `match: preferred: original_year` is set to "yes", beets will apply
an unweighted penalty of 1.0 for each year of difference between the
release year and the original year.

We now configure individual weights for `mediums` (disctotal), `label`,
`catalognum`, `country` and `albumdisambig` instead of a single generic
`minor` weight. This gives more control, but more importantly separates
and names the applied penalties so that the UI can convey exactly which
fields have contributed to the overall distance penalty.

Likewise, `missing tracks` and `unmatched tracks` are penalised and
displayed in the UI separately, instead of a combined `partial` penalty.

Display non-MusicBrainz source in the disambiguation string, and
"source" in the list of penalties if a release is penalised for being
a non-MusicBrainz.
Use `add_ratio()` for year penalties, with the difference between now and the original year as the max.
Remove redundant max/min calculations for track length distance. `add_ratio()` already does this.
Don't assume all releases know the original year. Use `add_ratio()` if they do, otherwise apply full penalty with `add()`.
Code style.
Doc string update.
Rename `Distance.penalties` to `Distance._penalties`. It should be private.
Add `Distance.raw_distance`, to compliment `max_distance`.
Exclude zero value penalties from `Distance.sorted`.
Group preferred media patterns, in case they contain "|" to keep them separate from the number of media.
Add `ignored` setting. Don't show matches with specified penalties applied, e.g. missing tracks or unmatched tracks.

If you know you never want these, they can clutter up the interface
especially now that we have multiple data sources.
Code style. Use "_" when expanding variables we don't need.
Colour benign track index changes in light gray, consistent with non-penalty supplementary information.
Colorise no-penalty text differences in a secondary colour, light grey.
Don't bypass candidate selection in timid mode. Always show all candidates.

Saves paranoid and interested users from having to either force all max
recommendations to none or constantly go back to candidate selection
from a recommendation to see if there is another slightly less similar
but more preferred (by the user) candidate.
rename "section" markup
Look at track penalties as well when downgrading recommendations for albums.
Improve preferred media/country and original year distance calculation.

Check only preferred media/country, if specified. Don't apply penalty
for preferred AND tagged mismatch.

Assume original year is 1889 (first gramophone discs) when we don't
know the original year.

Allow single values to be specified in configuration, instead of
requiring a list (e.g. use `as_str_seq()`).
Fix `add_priority()` calculation.

We were incorrectly adding 1 to the length of options to avoid a divide
by zero, when we should instead default the length to 1. Otherwise we
skew the penalty towards zero.
Add `Distance.__iter__()` and `Distance.__len__()`, for convenience.