Provide a type-safe replacement for `BtcAmount` and `FiatAmount`

As reported in issue #141, class `FiatAmount` is not as robust as it could be. The instances of different currencies share the same class, what requires continuous checks to verify we are not mixing different currencies inappropriately.

This change proposes a new replacement for `FiatAmount` and `BtcAmount` which uses a type-safe mechanism that makes impossible to mix amounts of different currencies.