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`.

Surprisingly, it is not. `Exchange[_]` should refer to the type bound at class declaration but it doesn't work like that.
Example:

```scala
scala> case class Foo[T <: Number](underlying: T)

scala> def fooAsInt(f: Foo[_ <: Number]) = f.underlying.intValue
fooAsInt: (f: Foo[_ <: Number])Int

scala> def fooAsInt(f: Foo[_]) = foo.underlying.intValue
<console>:9: error: not found: value foo
       def fooAsInt(f: Foo[_]) = foo.underlying.intValue
```