first half-attempt at a flexible attribute schema

This uses two tables, item_attributes and album_attributes, as key/value
tables for the respective entities. Plugins register fields, at which point
they are magically materialized as properties on Items (Albums are not done).
This currently supports adding and modifying these fields but not retrieving
them (which will need some sort of join).
An attempt at flexible attributes with plugin namespaces.
Mostly untested.
Started hacking `CollectionQuery` to search flexible attribute fields.
Fixed up a couple of query classes for flex attr support.
ironing out some kinks
Code for reading attributes from concatenated flex columns into dicts moved to an outside methods to make it usable for both BaseAlbum and Item objects.
Merge pull request #208 from steinitzu/flexattr

partial flexattrs
experiments with "un-registered" flexattrs
get and set flexattrs with hyphen keys

Here's another little experiment: to make flexattrs a little easier to use for
end users, you can now get and set them by using 'namespace-key' as the
argument to __getattr__ or __setattr__.

For example, try:
$ beet mod foo-bar=baz
$ beet ls -f '${foo-bar}'
baz
baz
baz
...
reduce redundancy in item queries

Now the SELECT query for items only appears in Library.items(). All other
functions that retrieve items go through this method. This should make it
easier to change the way flexattrs are picked up.
merge with master

We should work off the latest changes because of the recent changes to the
Query class hierarchy.
rename "section" markup
Add 'disk' spelling as a multidisc marker.
Fix bug where a null value for lengthMS would crash an import. Added a fallback to parse the standard min:sec length field.
Merge pull request #319 from tima/beatport-ms

Fix bug where a null value for lengthMS would crash an import. Added a fallback to parse the standard min:sec length field.
changelog/thanks/style for #319
Merge branch 'master' of https://github.com/sampsyo/beets
move Distance class to hooks module
finish removing setUp from DistanceTest

I had to do this for the tests that use the config, so I thought I might as
well finish the job.
replace Distance.sorted() with .items()

This is an effort to make the distance object feel slightly more dict-like.
The name changed and order of tuples is reversed: we now yield (key, value)
instead of (value, key), which I think is a little more intuitive.