PLT-362 - Currency and Money classes

Add classes for Currency, CurrencyAmount, MultiCurrencyAmount, CurrencyPair, FxRate.

This is an initial commit to setup a reasonable initial set of currency/money classes. More will probably be added later. `Currency` changes some method names from v2.x and adds more constants. `CurrencyPair`, `CurrencyAmount` and `MultiCurrencyAmount` are updated from existing classes. `FxRate` is new and holds a pair and rate.
Any way of letting the user know what the duplicate was? Could add toString at the end of the exception message?