Recreate shipments in frontend when necessary

Every time a customer gets to the point where shipments were created,
delivery step, and then decides to go back and change some item quantity
or add a new product we need to recreate the shipments so they properly
reflect the current order state.

I initially tried to apply these changes on the spree_core level but it
turns out to be really difficult because while both backend and frontend
use the same API in backend inventory units are created as soon as items
are included on the order. On the other hand in frontend inventory units
are only created when customers reaches the delivery step

Fixes #3339
Fix back end payment methods not showing up

Fixes #3233

Conflicts:
	backend/spec/controllers/spree/admin/payments_controller_spec.rb
[backend] PaymentsController#load_order should return order object, not result of authorize! call
Add dependent: :destroy to Spree::Shipment.shipping_rates

When an order transitions back from delivery, to a prior state, then back into delivery, shipments are destroyed, but not shipping_rates, leaving orphaned records behind.

Fixes #3349
Apply coupon before payments are created and processed

Payments can't be created before a promotion discount is applied,
otherwise we get inconsistent values between payment amount and order
totals

Conflicts:
	frontend/spec/requests/checkout_spec.rb