annotate: Attempt to improve guesses for fuzzy matches

Adds an extra layer to the fuzzy matching framework, allowing groups to
have more than one tag. The subgroups have no explicit threshold, rather
their score, an approximation of description consistency, is calculated
across group members. A category guess is calculated by taking the tag
of the maximum normalised lcs across subgroups. Membership of a subgroup
is defined by user confirmation of a category, which may reduce the
overall score of the group.

Overall this change appears to slow down the fuzzy matching by a
back-of-the-envelope factor of 3, but the hope is it improves the
quality of guesses. No data has been collected on guess quality.