Stopped using pesky doubles.

doubles cause errors in rounding due to their floating point nature.
I’ve switched the pricing system to an implementation relying on
java.math.BigDecimal. This prevents things like
0.1 + 0.2 - 0.3 != 0.0
occurring.