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
This function is private. The public one is `signHerRefund()` above, which is actually invoking `ensureValidRefundTransaction()` before calling this private version. 

Nevertheless, I'm making some changes to verify the amounts of the refund transaction to be sure of its correctness.