Adds proposed functionality which enhances the ability of extensions to ...

...customize line items and the entire cart composition process

This work is a follow-up to https://github.com/spree/spree/pull/4546.

Please see: https://github.com/jsqu99/spree_product_customizations (a rework of 1/2 of the spree_flexi_variants extension (github.com/jsqu99/spree_flexi_variants)) as an example of how these changes would be used by an extension.

There's a lot here, but the basic idea is to allow extensions to follow some basic conventions in order to hook into the "add to cart" process without major surgery involving the core spree order code.

Related to this is the ability to know if two line items match and how to instruct spree to make those determinations.

I'll keep the description light here and let the code be reviewed as a first step.

Please see the referenced initial pull request above as background.



Even though I like this signature very much I wouldn't put this in 2-3-stable at all.

We need to start being more conservative about stable branches imo so we better off discussing a large change like this (the whole PR I mean not just this specific line) before merging into master itself and let the others for fixes only.