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 
Should we have some kind of assertion here if there are any items left after the call to `reject!`?