add configurable option to clone products without copying original images

Fixes #4711
Loosen friendly_id restriction.
Refactor Spree::ProductHelper#variant_price_diff

* Change the logic of the code to make it easier for the next
  commit.
* Remove duplicate code from the HTML generation.
Change #variant_price_diff to handle when the product amount is nil
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.
Add inverse_of for more associations involved in cart processing
Add validation to Spree::StockItem for count_on_hand
Change Spree::OrderUpdater#update to be performed inside a transaction
Fix spec formatting and spelling
Change item adjustments to reset item totals before processing

* Some of the computations use Spree::LineItem#total, which may include an
  #adjustment_total that was previously set for the line item. The value could
  have changed due to a quantity change so it is necessary to reset this to 0
  before starting the process of updating adjustments.
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
Fix template formatted and ids
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