Switched delta_quantity to a decimal to solve stupid floating point errors that I totally should have anticipated...
Switched all calculated properties to a cached property.

It requires you to hit the db again to get a recalculated value, but
most of these were so expensive anyways, so you had to hit the db no
matter what. This is far more efficient in the long run as far as I can
tell, it's just that it introduces the risk of using stale values in
some edge cases.