Release script: build command
Release script: extract changelog
add buckets plugin + tests

Add a new template functions %bucket(text, field) for path formatting.
fix range upper bound + tests added
add bucket plugin doc
Update bucket.rst
Update bucket.rst
include bucket.rst in toc tree
Update index.rst

indent line
cleanup docstrings and add tests
Make _formatted_mapping lazy and an instance

The motivation for this is to increase the performance of template evalutation.

Previously, the `model._formatted_mapping()` method returned a dictionary that
served as the environment (mapping of variable names to values) when evaluating
a template. To populate the dictionary, we iterated over all keys in the model,
formatted the values, and assigned it to the dictionary. This meant we
formatted every field, even if the template did not require it.

With this commit `_formatted_mapping()` does not return a populated dictionary
but a proxy (or view) instance. The object only knows about the model and the
keys it provides the formatted view for. If a variable is requested by the
template it computes the formatted value on the fly.

The class-based approach has one additional advantage: In the future, we can
separate the formatting logic from the database logic.
Merge pull request #751 from sampsyo/lazy-formatted-mapping

Make _formatted_mapping lazy and an object
Make FormattedMapping behave more like a dict

The collections.Mapping abstract base class provides all the nice dict-like
functionality we need.
Property for easy FormattedMapping access
Changelog for faster queries (lazy formatting)
Shortcut some tests in Model initialization

When Model objects (Albums and Items) are loaded from the database a lot of time is wasted checking if the object is dirty and if fields are fixed or flexattr.

This change alow bypassing these checks when we know that the data is correct ; it should only be used when loading Model from the database.

With this, listing all tracks in my test database (8200 items) takes 4 seconds while it took 31 seconds previously.
Fix formatted.get calls
Release script: convert changelog to Markdown
Release script: upload command
Add option to extrapolate year buckets names

- spans are now tracked via a list of dicts instead of 2 lists
previously (simpler code)
- extend_year_spans() pregenerates all possible ranges at plugin setup
stage
- a BucketError is now raised if declared bucket format not accepted