Reapply commit "Remove `ìnverse_of` from order ...

To get a fix where an order object was being passed to shipping
calculators instead of a package object
Use includes(:model) for fewer queries
Fix free shipping spec

We need to call `order.update!` after applying the promo as there's no
longer an active record callback to do so (makes things way faster)
Run one query to set promo adjustments not eligible
Dont update shipments adjusment in order cart
Dont reload adjustments before calling update! on them

They will be recalculated anyway
Fix api shipments controller spec

As now orders in cart state won't have their shipping adjustments
updated (because orders in cart aren't supposed to have any shipment)
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 still recreate shipments properly

Another minor change on CheckoutController was necessary. We need to run
`setup_for_current_state` only after all other checks 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.

Conflicts:
	api/spec/controllers/spree/api/orders_controller_spec.rb
Have order populator return a hash of variants/quantities added to order