restart the checkout_flow when modifying the order.

Fixes #3990
Fixes #4027
Apply coupon code before updating order attributes in checkout_controller_decorator

If a coupon code applies an order total adjustment (i.e. a free shipping promotion) then the payment's amount will be the amount that the order was at BEFORE the coupon was applied.

Therefore we must apply the coupon code FIRST, and then update the order and set its payment total to the correct amount
Stub restart_checkout_flow method on orders for OrderPopulator spec
Correctly call + stub restart_checkout_flow in OrdersController and its spec
Do not restart_checkout_flow if order state is cart