Fix processing of invalid line items

This PR fixes cases where `OrderContents#add` triggered adjustments of line items that could not be persisted.

The change makes sure that invalid line items get returned unsaved to the call side within the `OrderPopulator` that will recheck `#valid?` to steer its UI flow on.

Before invalid line items created by `OrderContents#add` got adjusted and can cause all sorts of errors like violation of foreign reference / adjustable lookup errors etc.

The specs added kill all mutations of changed call subjects before and after the change. I admit they are not very beautifully written. But without tearing them apart and rewriting the whole spec suite for `OrderContents` I could not think about a better way to cover the big holes in the specs.

My spec additions are style wise in line with the present ones.
@dkubb BTW dropping the line item parameter has no single visible effect. Downstream `Promotion::Actions` do not read `:line_item` key from `payload` being generated here: https://github.com/MountainRoseHerbs/spree/blob/2-3-stable-mrh/core/app/models/spree/promotion_handler/cart.rb#L26 and I could not find a single `Promotion#eligible?` call where the line item was eligible and the order not. See https://github.com/MountainRoseHerbs/spree/blob/2-3-stable-mrh/core/app/models/spree/promotion_handler/cart.rb#L25.

Passing the line item around would be *conceptually* a good idea to remove this negative matching crazyness in the `CreateItemAdjustments` https://github.com/MountainRoseHerbs/spree/blob/2-3-stable-mrh/core/app/models/spree/promotion/actions/create_item_adjustments.rb#L16-L21. But for now we have to go for the least minimum possible improvement.