Introduce OngoingExchange

**Description:** Introduce OngoingExchange to solve the problem of our code knowing more than it should know before it happens. In upcoming PRs the information at Exchange will be reduced respect with OngoingExchange (that has the benefit of being created after the handshake).
**Testing:** tests pass.
**Coverage:** unchanged.
Meybe not for this PR, but I think `Exchange` should be covariant, so `Exchange[FiatCurrency]` means "an exchange of any fiat currency". That way we avoid the `Any*` types which are a code smell IMHO.