Partial replacement of `BtcAmount` and `FiatAmount` by `CurrencyAmount`

Provide a more convenient interface to `Currency` classes.

* Move operators from `Currency#Amount` into `CurrencyAmount` trait. That makes possible to use such operators with the more abstract type if needed.
* Add convenience `apply()` functions to `Currency` trait to instantiate amounts in a less verbose way.
* Add a marking trait `FiatCurrency` to deal with fiat currencies. The Java representation is moved exclusively for instances of this trait.
* Add a `FiatCurrency.apply()` function to obtain a currency from a `java.util.Currency` instance.
* Add utility functions to `Currency.Bitcoin` to convert from/to Satoshi amounts.

In some parts of the codebase, the usage of `BtcAmount` and `FiatAmount` is replaced by generic class `CurrencyAmount`.

just fyi, I think this would be an equivalent statement: `type AnyExchange = Exchange[_]`