ProximitySortPlugin for distance-based sorting

This plugin allows to find values close to some point. For example DJ can look for tracks with bpm 120 and around. My rationale is to find closest values of self-defined flex field.

Sort plugin hook is based on query plugin idea. Providing something after `+` or `-` in the sort term will force appropriate plugin to handle this sorting. ProximitySortPlugin registers itself on the `^` symbol. 
In this case `beet ls bpm+^90` command will list tracks with bpm 90, 89, 91, 88, 92, etc.

ProximitySortPlugin sorts fixed fields in DB. Flex and computed fields are sorted using python.
For modularity, we're trying to keep the `dbcore` component disentangled from the global beets state. Rather than picking up sorts from plugins directly, we should have the parser pick up the sorts from the model class. This would follow the same pattern as the discovery of query kinds: each model class declares the queries it wants to add to the system.

Although it's admittedly not obviously useful, this would also easily allow different models to someday have different kinds of sorts (if some sort applies only to tracks, for example).