Use classes, add validation, and track denominations

This commit has a lot of code changes in it, but I wrote them all at
once, so breaking it up doesn't really make sense.

* Track *denominations* of country's currencies.  See the glossary
section of the README for my definition of a denominiton.  This allows
us to elegantly handle the scenario where a country has redenominated
it's currency but not changed the name of it.

* Use classes to represent countries, denominations of a country's
currency, and pieces of currency belonging to one denomination of a
country's currency.

* Add validation code to check that what we're saving to disk is sane.
This is called as the ``validate()`` method on each class just before
serializing it and saving it to disk