Update ShipmentPacker with a more efficient packing approach

This updates the `ShipmentPacker` to iterate items from heaviest to lightest packing in as many as possible until it has exhausted the pool of items. It does this in batches by item rather than expanding into a large queue to be packed.

This should eliminate the need for #170 since it approximates the number of packages based on an even distribution of the total weight across all the packages, instead of assuming each item occupies its own package.

@odorcicd @csfrancis @jstorimer 

/cc @t2coulth @DavidGeukers 
It's not so much that it would take forever, it's that we had several instances where someone entered a quantity of 1 billion, which this code then tried to expand to a nested array with that many elements, and we saw OOM errors. See #160 for a recent example.