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.
One other idea I had would be to add `MemoryScope#where`, eg:

```ruby
def where(opts = :chain, *rest)
  if rest.empty? && opts.kind_of?(Hash) && opts.values.none? { |value| value.kind_of?(Hash) }
    @base.select do |record|
      opts.all? { |key, value| record[key].eql?(value) }
    end
  else
    super
  end
end
```

This should allow you to use AR-alike code.