Validate products in clean() instead of save()

Conceptually, save() is the wrong place for model validation. ModelForms
call clean() before saving, so the results should be the same as long as
they are used.

Fixes #1297.
Add check for product class in product validation

So far, setting a product class was apparently not enforced.

Added a test for it. Removed the creation step, because it really isn't
necessary.
Move base shipping method into methods module
Use item-based shipping methods in US site
Remove find_by_code method from repo

This was no longer being used as the checkout code had changed to load
all viable methods and then iterate over to find the appropriate one.
Re-order params to shipping repository
Checkout: pre_conditions should be list, not a tuple

Tuples are for list of heterogenous collections and expensive to modify.
Lists are homogenous collections and cheap to modify.

https://stackoverflow.com/questions/1708510/python-list-vs-tuple-when-to-use-each

Also moved get_template_names to the bottom of the view as it's executed
last.
Checkout: Skip payment if order total is zero

When ordering a basket of free products, or with vouchers giving 100%
discount, we should not collect payment details.

To achieve this, I've added a check to the CheckoutSessionMixin which
calculates the order total and decides whether payment is necessary.

The modified test failed because the OrderCalculator called by
check_payment_is_necessary accessed other properties on the shipping
method. We now just mock a valid shipping method, which still achieves
the aim of ensuring there's only one.
Unit tests now pass for new method API
Adjust price object to allow tax to be set later
Unit tests for discounted shipping methods now pass
Checkout calculator unit tests pass
Move tests into integration test folder

As they are integration tests, not unit tests.
Adjust order creator to work with new shipping charges

We now need to pass in the shipping charge explicitly as well as the
method. The way that the shipping discounts are persisted is also
adjusted.
Adjust checkout to pass shipping charge

This fixes the remainder of the tests - yay!
Adjust model-based shipping methods to use the new API
OrderCreator now requires shipping method/charge to be passed

They no longer default to free.
Adjust API for checkout calculator

It now takes the shipping charge rather than the method. This makes
sense as the shipping charge has normally been calculated before we need
the order total so there is no point in calculating it twice.
Adjust basket page to show shipping discounts correctly
Use a templatetag to inject the shipping charge/discount

This is needed now that shipping methods don't carry the basket around
with them.