WIP: Play with a way to start moving logic to POROs by delegating model behavior

This is an extremely small first step towards getting logic out of the
activerecord models, it should not change any behavior and ultimately
just adds a level of indirection, but it enables us to start separating
these responsibilities and developing a pattern of how to handle logic
separately from models, as well as allows us to see where things are
called implicitly so that we can invert that to be more explicit.

Relates to #5636
I think this should be called from https://github.com/spree/spree/blob/master/core/app/models/spree/order/checkout.rb#L108 and remove this finalize! method altogether, but we would need to deprecate it first as many people decorate and/or alias method chain here to add custom behavior.