Add timeout to kill mutations causing infinite loop

* Will also prevent excessive runtime for core unit specs.
Change #current_order to always lock the order when querying

* I believe some of the problem with the deadlocks is happening because
  of inconsistent locking, and updating without acquiring a lock properly. As a
  test I am going to enable it across the board and see how things perform.

Conflicts:
	core/lib/spree/core/controller_helpers/order.rb
	frontend/app/controllers/spree/checkout_controller.rb
Add validations to stock items and stock movements
Change Spree::OrderUpdater#update to be performed inside a transaction
Refactor CreateItemAdjustments#perform to not use an unscoped query

* The previous query for adjustments would return every adjustment for every
  order's line items. This would then result in a huge list of ids passed into
  the NOT IN clause, causing a huge generated SQL query to be executed.
* Refactor code to be simpler
Add adjustment total to the order summary
Change adjustments controller to only display eligible adjustments
Fix the discount to be the order adjustment total

* The promo_total does not include manual adjustments
Refactor gateway error reporting to be more extensible
Add error parameter that includes the gateway error message
Fix line item quantity validation to be more precise
Refactor availability validator to use a guard clause
Fix bug where line item quantity cannot be set to zero for out-of-stock items
Change address factory to reuse state before creating one
Kill exception shadowing

* The code used to rescue any exception. Even exceptions operators /
  developers want to stop the world.
* When we want to allow a certain set of exceptions to be shadowed we
  should use shipment rate calculation specific exception lists that still
  allow shipment-unrelated exceptions to stop the world.
* When the downstream libraries do not provide matchable exceptions
  these should be fixed instead of adding a debugging burden to everyone
  having to work with shipment rate calculation.
Promote Order#all_adjustments to association
Only perform Order#reload when needed

* Moves Order#reload out of OrderContents
* Does Order#reload where mostly specs need to sync its own record.
* Reduces chance lazy loading with N+1 pattern occurs from calculation
Simplify and deduplicate Order#merge! implementation
Refactor object graph access to deduplicate loads

* Reduces the available object graph paths to access Spree::Adjustment
  instances to one.
* Reduces the amount of duplicates being loaded via performing in-memory
  scoping on associations.
* Significantly reduces the amount of lazy loads triggered within most
  order operations / populations through the elimination of duplicates.
Add Spree::Payment#editable?

* This method returns true if the payment amount can be edited