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've added a method to the shipment's public api here so that it can be called from FinalizeShipment just so that I could get this up as a proof of concept. I expect that this will not be necessary as we continue to move forward.