Introduce better approach for regenerating shipments

Instead of recreating shipments every time customers change order items
it only destroy shipments, if any exists, and put order state back into
address so users are forced to transition the order again from address
to delivery and so still recreate shipments properly

Another minor change on CheckoutController was necessary. We need to run
`setup_for_current_state` only after all other check are done. e.g.
authentication, valid order state. This is so that customer don't get
their items removed by the Differentiator. Current specs should cover
all possible scnearios I could think of.