pypy-compatible sqlite3 invocation
Cover Art Archive support (GC-71)
fetchart: get local art for as-is imports (GC-339)
fetchart: command to manually download art
fetchart: autofetch option

This necessitated a slight refactoring in the plugin event handling mechanism.
Rather than loading all handlers up front and storing them in a module-scope
structure, we now scan for event handlers at every send(). This is probably
very slightly less efficient but allows for more flexible logic.
add experimental fuzzy matching plugin

fuzzy is a command which tries to be like the list command but using
fuzzy matching.
implement album option for the fuzzy plugin
Rename Fuzzy plugin class name. remove useless
conversion of an iterator to a list

the plugin class was called Random (because of copy
paste)
include global index in TrackInfo objects
AlbumMatch and TrackMatch types

These new named tuples will represent candidates given by the autotagging
system. In the case of album matches, these are currently unwieldy,
verbosely-documented tuples that will only get more unwieldy with the addition
of "unmatched tracks".
match ordering without length assumptions

This replaces order_items with assign_items, the first step to allowing unequal
numbers of items on either side of the equation (user files and canonical
tracks). Rather than returning a "holey" list and assuming that the TrackInfo
objects stay static, the function returns a dictionary mapping Item objects to
TrackInfo objects. To indicate unmatched objects, two sets are also returned.

For the moment, some temporary code is included to turn the result from this
new function into the old format (a holey Item list). This allowed me to test
this change in isolation before plunging ahead with the necessary refactoring to
expose all of this to the importer workflow, etc.
use TrackInfo.index in apply_metadata

enumerate() no longer necessary.
use TrackInfo.index in difference display

Again, enumerate() has been obviated by this addition.
respect per_disc_numbering in missing tracks
merge
docs typo
fix tests broken by TrackInfo.index
use AlbumMatch/TrackMatch objects everywhere

This allows matches to indicate both missing and unmatched tracks in their
candidates and solves some of the spaghetti tuples that were passed around
during autotagging.
don't import unmatched tracks
docs for unmatched-tracks matches