Deduplicate Spree::Adjustment loads for performance

* 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.
My primary reason for preferring `block` is that the implementation has already gone through all the work to create the `Proc` object, and `block_given?` has to do more work to see if there's a block passed in than simply testing a local variable. Testing a local variable is least cost and imho the simplest thing that you can do.