moved rate getting into ExchangeRateSource

implemented caching too