Use a custom widget to show unavailable variants in dropdown

We define a custom select widget which allows certain choices to be
marked as disabled.  We use this to include unavailable variants in the
add-to-basket dropdown.
Adjust sample strategies for UK and US

- Improve documentation on what they are for
- Move tax rate into UK strategy
Ensure get_discount uses the correct parent charge for discount

Before this, it was wrongly using the tax inclusive charge each time.
Merge pull request #1020

Conflicts:
	docs/source/releases/v0.6.rst
Fix all flake8 issues.
Update to flake8 2.1
Remove threshold and ignored warnings from lint.sh

Also output the errors directly now that it's not over 100 anymore.
Move flake8 configuration to tox.ini

That way it is picked up for example by vim.
Check complexity as well

For now, just add noqa to the functions that fail the complexity test.
Merge pull request #1076 from tangentlabs/issue/1070/offer-prices

Extend offers to work in both US and UK style tax regimes
Correct variant fixture loading in makefile
Add support for file and image attributes
Handle fuzz data within search facets

TIL Haystack passes "selected_facets" data unfiltered to the search
form, and so you have to be careful in interpretting the data passed.
This change avoids sequence errors when creating a dict from the passed
facet data.
# Last 5 commit messages
# ----------------------
# 07eff7b Add support for file and image attributes [Izidor Matušov]
# ec12c47 Merge pull request #1076 from tangentlabs/issue/1070/offer-prices [David Winterbottom]
# 41c7edc Merge pull request #1020 [David Winterbottom]
# a9eb4f2 Ensure get_discount uses the correct parent charge for discount [David Winterbottom]
# 2de69cc Adjust sample strategies for UK and US [David Winterbottom]
Ensure basket line prices are calculated to correct precision

Use D instead of Decimal everywhere.
Remove dead offers section from product update form

Based on 8617a75, we remove the offers section and correct the loading
of the ranges section within the product dashboard template.
Show spelling suggestion even if no results
Introduce new API method for strategies (for basket lines)

This allows availability to be correctly determined for complex basket
lines which use basket attributes to hold information vital for
availability decisions.  An example is bundle products that store bundle
product IDs in the basket line attributes.

A new template tag is also introduced, which has an inconsistent name
with the product version.  This will be fixed in a later commit.
s/session_strategy/purchase_info_for_product

Rename product templatetag to be inline with the basket line one.
Rename strategy fetch method to fetch_for_product

More explicit innit.
Rename StockInfo to PurchaseInfo

The word "stock info" was bugging me as it's not quite correct for the
combination of availability and price information.  The problem is the
word "stock" which implies physical widgets in a warehouse somewhere.
It sounds weird for ask for stock info for a digital product.

Hence, I came up with PurchaseInfo, which is a bit more vague but
captures the information better.