text: Title: Basket may be reused if an error happens after an order was placed
  Body: ### Issue Summary
  If an error happens in `OrderPlacementMixin.handle_successful_order` (e.g. a mail can't be sent) then `PaymentDetailViews.submit` will subsequently thaw the basket (https://github.com/django-oscar/django-oscar/blob/d076d04593acf2c6ff9423e94148bb491cad8bd9/src/oscar/apps/checkout/views.py#L643).
  
  The basket will then remain open and thus re-used but the [default implementation](https://github.com/django-oscar/django-oscar/blob/d076d04593acf2c6ff9423e94148bb491cad8bd9/src/oscar/apps/order/utils.py#L34) of `OrderNumberGenerator.order_number` will prevent any order from being created from the same basket as that would result in [duplicate order numbers](https://github.com/django-oscar/django-oscar/blob/d076d04593acf2c6ff9423e94148bb491cad8bd9/src/oscar/apps/order/utils.py#L59).
  
  
  ### Steps to Reproduce
  
  1. Create a basket
  1. Make sure that you have a an order_placed email that would be sent
  1. Ensure that sending an email will fail, e.g. by using the smtp backend with a server that doesn't exist
  1. Submit the basket, observe an order object being created 
  1. Ensure that sending an email will succeed
  1. Try submitting the basket again, subsequent submits fail because `There is already an order with number ...`
  1. The user is now stuck with a basket that can't ever be submitted.
  