WIP Refactor checkout

This decouples the checkout flow from the individual checkout views.

There are now three checkout view mixins:

  1. checkout.session.CheckoutSessionMixin puts relevant checkout info in
     the template context. Pre and skip condition code has been removed.
  2. checkout.mixins.OrderPlacementMixin as before has the meat of making
     an order from a basket and handling payment. After placing the order
     control is returned to CheckoutFlow.
  3. checkout.flow.CheckoutFlow is new and manages the checkout flow.

CheckoutFlow provides checkout(), which uses the checkout session data to
determine the next step in the checkout, and redirects there. If all
steps are complete, it lets OrderPlacementMixin handle the basket to make
an order.

If a redirect payment method is used, the payment result view can call
checkout_failed() or checkout_successful() to return flow control to
CheckoutFlow. checkout_failed() will show the preview page again, and
checkout_successful() will redirect to the thank-you page. This allows
customizing this part of the flow independently of the payment
implementation.

The individual checkout views were stripped of pre and skip conditions and
other checkout flow code. The all use the CheckoutFlow mixin instead of the
CheckoutSessionMixin or the OrderPlacementMixin.