Remove abstract types on Exchange

**Description:** remove abstract types on `common.exchange.Exchange` and take advance of it to solve other smaller issues. It is recommended to review this PR commit by commit.
**Testing:** `sbt test` pass
**Coverage:** 85% for common and 87% for client module