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.
Extend docstring for new fetch_for_line strategy method
Rename stockrecord_tags to purchase_info_tags
Adjust purchase_info template tags

- Use simpler decorator
- Tighten validation check
Merge pull request #1008 from tangentlabs/issue/1008

Need to determine stock info of basket lines which have attributes