Refine and test exchange model

**Description:** refine and test the exchange model up to the handshake part. Closer to a complete implementation but we should stop and merge at some point so stuff marked as TODO and MicroPaymentChannel stuff is out of scope.
**Testing:** tests pass!
**Coverage:** about 80% for the `impl` package.
**Reviewer:** @ximo
I don't know which line this comment refers to. 

Nevertheless, why any deposit should have such a confidence type? As far as I see in the Javadoc:

```java
    public enum ConfidenceType {
        /** If BUILDING, then the transaction is included in the best chain and your confidence in it is increasing. */
        BUILDING(1),
  ...
        /**
         * If a transaction hasn't been broadcast yet, or there's no record of it, its confidence is UNKNOWN.
         */
        UNKNOWN(0);
```

AFAIK, the refund transaction is not broadcast in the handshake process. Thus, it cannot have  `BUILDING` confidence type but `UNKNOWN`.