Checkout: Skip payment if order total is 0

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.