Pass shipping method/address into submission methods
This means it's easier to apply taxes to the shipping method. Without
this, the shipping method was reloaded each time it was needed which
made it difficult to apply taxes only once.
We now check that a valid shiping method can be looked by its code, not
just that a code is set in the session. This avoids the case of
silently reverting back to free shipping.
Fixes #801
Use charge_incl_tax instead of basket_charge_incl_tax(). This is
clearer.
Backwards compatible versions of the old methods are kept for now.
Related to #805
This is to support US-like sites where sales taxes are only known once
the customer enters their shipping address.
This requires several changes to templates to show prices exclusive of
tax when tax isn't known.
Offers are currently now applied until taxes are known as it is unclear
to me whether to use the tax-exclusive prices to determine whether
customer's meet value conditions. This may change later.
This solves an issue when there is a shipping discount, but the shipping
method is not wrapped in an OfferDiscount instance (causing an
AttributeError on get_discount). The fix adds support for discounts on
the parent object so that we're no longer in violation of the Liskov
subsitution principle (kind of).
This required:
* Adding a new benefit type.
* Reworking the way shipping methods are looked up by code to ensure
they are 'primed' correctly. Ie, they pick up the discount wrapper.
* Reworking the shipping method repository to use two 'prime_' methods
to post-process the method instances.