Rework how prices, availability and taxes are determined

This is a parallel thread to #439 trying to solve the multi-stockrecord problem but also addressing how taxes are calculated, and availability is determined.

Catalogue/browsing:

- [x] Product listings showing correct price
- [x] Product detail showing correct price

Product:

- [x] Remove all usage of `product.stockrecord`
- [x] Remove all usage of `is_available_to_buy`
- [x] Remove all usage of `has_stockrecord`
- [x] Ditto `is_purchase_permitted`
- [ ] Variants (see `_create_product_group` in basket forms)

Basket:

- [x] Remove `is_purchase_permitted` from basket form
- [x] Extend basket line model to track stockrecord
- [x] Get basket functionality working getting price off the stockrecord
- [x] Get basket functionality working getting price through strategy class
- [x] `_charge_tax` property
- [x] How to handle stockrecord being deleted
- [x] Saved lines
- [x] Do we need both `is_available_to_buy` and `is_purchase_permitted`?  Can they be merged?
- [x] `_tax_ratio` - Do we need it?
- [x] Remove tax exemption methods

Partner

- [x] Deprecate stockrecord wrappers and associated methods

Placing order:

- [x] Check that all products have stockrecords before placing order

Dashboard:

- [x] Adjust product listing
- [x] Range management
- [x] Product CRUD

Strategy:

- [x] Revisit API of strategy class - should it be easier to find out if a product is available?  Use a namedtuple?
- [x] Short message on availability class (better than truncating)
- [x] Check places that are passing strategy when it is already on the basket

General:

- [x] Assign controller in middleware
- [x] Use separate classes for availability and pricing
- [ ] Variant products!
- [ ] Upgrading guide
- [x] Deprecate old partner wrapper functionality
- [x] Customer stock alerts
- [ ] Number of queries on catalogue pages

Notes on backward compatibility:

- Basket: `add_product`, `line_quantity` have changed their signature.
- Order creator: `get_partner_for_model` removed
- Offer: `can_apply_condition` and `can_apply_benefit` takes  a line not a product
- Product: `has_stockrecord`, `is_available_to_buy`, `stockrecord` decrecated
- Basket: is_submitted, can_be_edited now properties.

Test stories

- [x] UK VATable products
- [x] Certain users don't pay tax
- [x] US sales tax model
- [x] Dynamic pricing (eg Blakey)