Improve AddToBasketForm

Wowsers! This form must be seriously old - it still refers to products
as "item"s which was dropped from Oscar at about week 3. So it's overdue
a refactoring.

This change alters the constructor signature to not require the request
as that's a nasty codesmell as forms shouldn't know about the request
directly. The request is replaced by passing the basket - the strategy
instance can be accessed of the basket anyhow.

I've renamed the kwarg "instance" to "product" and fixed the callers.

I've also reordered methods in a few classes to roughly follow the
normal order of execution. I find this helps to understand classes you
haven't seen for a looooong time.
Add simple tests for AddToBasketForm

Plus some comments on why things are the way they are in the form.
Tidy basket views

I've become slightly obsessed with methods being listed in the approx
order that they get executed.
Add test factories for products, partners and stockrecords

This is part of the long-term move to use FactoryBoy for tests.
Adjust AddToBasket form to require purchase info

This means we don't need to do the law-of-demeter-violating call to
fetch the purchase info for a product (line 79 of forms.py). HOWEVER,
I'm starting to have second thoughts about this - I've discovered that
the adding to basket process is quite confusing for variants and I
intend to refactor.

This commit also adds some useful tests though so it's a valid stepping
stone to a better place.
Use sequences for unique fields in factories
Fix bug with variant AddToBasket forms
Restructure add-to-basket form and view

This is quite a large change. It:

- Alters the add-to-basket URL to have the "base" product's PK in it
- Changes the constructor of the AddToBasket form to not require
  purchase_info (even though I only just introduced it!)
- Renames the product_id field to variant_id and only uses it for group
  products

These changes are motivated by the variant workflow. Before this change,
you effectively had different forms being used for rending and
validation as the product being passed to the form constructor was the
group product when rendering but the variant when validating. This just
about worked but was not nice.

The purchase_info param is removed as we can only calculate the
purchase_info once the variant product has been validated. Hence we
again violate Demeter and make a deep call to the purchase info
calculation within the basket form. Might revisit this again.

This change also simplifies the basket view logic and allows a form to
be removed.
Test basket's strategy class is correctly exercised by form

This shows the problem with forms knowing too much of the details of
collaborators. This is a design smell and will be looked at before
things get too stinky.
Validate that basket additions have the same currency as the basket

And this is the outer-most frame of the Yak-shave: preventing the many
errors messages I get from the public sandbox site where people try to
add products of multiple currencies to their basket.

It was quite a journey...
Ensure errors messages are stripped of *s

Not sure why but Django adds a "*" to non-field errors. We get rid of
them as they make our flash error message look weird.
Document the reworking of basket additions
Merge pull request #1340

Conflicts:
	docs/source/releases/v0.8.rst
	oscar/apps/basket/views.py
	oscar/apps/catalogue/views.py