Represent Money value with decimal

Instead of using double, we now represent the money value using the
decimal type.  Since this is fixed point arithmetic, we completely
avoid rounding errors at the cost of more complicated persitance.