Model.load() should remove flexible fields
Remove BitBucket references
Skip zero-track matches (fix #942)
--version (fix #939)
mediafile: Zero-padded date format

Tag files with '2000-08-01' instead of '2000-8-1'
config: Add suport for 'key in config' syntax

We can use this instead of the cumbersome `config[key].exists()`.
genres.txt: rm fake genres

see issue #943; deleted all suggestions except 'early music' which some people may want/find meaningful
lastbeats: explain that the whitelist has been modified

current description sounds like the whitelist is regularly synced and should not be/has not been edited
Merge pull request #944 from gwern/patch-1

genres.txt: rm fake genres
Changelog for #944
Merge pull request #945 from gwern/master

lastbeats: explain that the whitelist has been modified
Add test helper for adding items
Modify command can remove fixed fields.

Removing a fixed field sets it to NULL in the database. If the model is
loaded, all NULL values are passed to `Type.normalize()`, so attributes
do not return `None`. Fixes #886.
Zero plugin removes tags

We can now set model fields to `None`. `MediaFile` removes the tags
corresponding to `None` fields. Hopefully fixes #157.
Change Model and Type internals

All field operations of a model use the methods of a `Type` instance to
provide custom handling. Field operations include getting, setting,
deleting and conversion to and from SQL.

* There is a one-to-one mapping between SQL values and the values
  stored in the model. Conversion is done with `Type.from_sql()` and
  `Type.to_sql()`. `NULL` values in SQL are directly mapped to `None`
  values in the model
* `Model[field]` retrieves the internal value stored in the model. For
  fixed field this either gives a value or `None`. For flex fields this
  may raise a `KeyError`.
* `Model.get(field, default)` uses `Type.default` to replace missing
  and `None` values
* `Model[field] = value` uses `Type.normalize()` to make sure internal
  values are consisten. Normalization is skipped for `None`.
* `Model.set(field, value)` excpects a string value and uses
  `Type.parse()` to convert and normalize it to an internal value.
FormattedMapping raises KeyError on unset fields
Migrate library models to new dbcore API
Add new Model.parse() class method
Formatter only fallsback for specific fields
Fix typo in tests