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

...customize line items and the entire cart composition process

Followup to https://github.com/spree/spree/pull/5062 (that PR was for 2-3-stable)
`currency ||= order.currency` makes sense to me.  We should always be using the orders currency, and it should not even be valid to add a line item to an order in the wrong currency.