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
You should not be able to create a micropayment cannel if the deposit isn't in the blockchain. You are correct when you say that the handshake process does not broadcast the refund transaction, but the argument here isn't the refund transaction, it is the deposit transaction.

We can take this offline if you want.