Refactor stock related service objects to deal with inventory units.

Prior to this change, stock related service objects (coordinator, packer,
prioritizer, package, adjuster) were tightly coupled to orders and line
items, such that they would only create a set of shipments for the set
of line items for an order.

This change makes those objects work with inventory units, which enables
future enhancements that would create shipments for an order that are
not necessarily tied to the initial purchase (e.g. upcoming exchanges
work).
why it doesn't follow the same behaviour as before? First checks if the variant tracks inventory and only then skips the loop if stock location has not stock for that variant. Besides saving us a query it might also introduce an issue where `Variant#track_inventory` loses its power .. (not 100% sure on that last part)