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.
Extend strategy class to work with variant products
The strategy API has gained a new method: fetch_for_group, which is for
fetching stock information about a group/parent/abstract product. Like
the existing fetch method, this is highly customisable.
For a group product, we fetch all relevant variants and stockrecords; we
then pass these to the methods that determine availability and pricing.
The pricing display logic for a group product has been simplified a bit.
We now just look at the first stockrecord and use that price - we no
longer say "From £X". This seems to be a more common pattern in the
wild and allows the templates to be simplfied as they no longer need to
handle group and standalone products separately.