Add the notion of currency units and subunits.

So far, every currency was measured in a single unit: dollars, euros, or
yen. However, most currencies have subunits: for instance, in the US,
it's dollars and cents.

The most straightforward way to model cents is to have the amount field
in US.Currency represent cents instead of dollars. To convert back to
dollars, it’s useful to introduce a field CurrencyUnit into class
CurrencyZone, which contains the amount of one standard unit in that
currency.
Define currency units and subunits for the US CurrencyZone.

The US object defines the quantities Cent, Dollar, and CurrencyUnit
This definition is just like the previous definition of the US object,
except that it adds three new fields:

* The field Cent represents an amount of 1 US.Currency. It's an object
  analogous to a one-cent coin.

* The field Dollar represents an amount of 100 US.Currency.  So the US
  object now defines the name Dollar in two ways. The type Dollar
  (defined by the abstract inner class named Dollar) represents
  the generic name of the Currency valid in the US currency zone.
  By contrast, the value Dollar (referenced from the val field named
  Dollar) represents a single US dollar, analogous to a one-dollar bill.

* The third field definition of CurrencyUnit specifies that the standard
  currency unit in the US zone is the Dollar (i.e., the value Dollar,
  referenced from the field, not the type Dollar).