refactor shipping calculator compute methods

Most of the shipping calculator `compute` methods take a `package` as an argument, but the underlying computation is being done on a more fundamental property -- like `price`, or `quantity`.

By factoring out the parts that are package-dependent from the parts that are price- or quantity-dependent, we make it easier for people to extend the functionality of these calculators -- for instance, by extending them to compute on `shipments` as well as `packages`, or in any number of other ways. This way we can have the core functionality in the `compute_price` or `compute_quantity` methods and not have to duplicate that logic.
Oh, we're just thinking of the method names differently.

I was taking the method naming convention to be `compute_(from)_package` and so I made the method name `compute_(from)_quantity` -- but I can see how that would be confusing.

We can call all of these `compute_price` if you want, or if you think it's clearer to make the expected parameters explicit, we can call them `compute_from_price` and `compute_from_quantity`.