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
Doesn't look bad to me, as long as we are willing to carry the exchange all the way up to the serialization point. What is still unclear to me is what would happen with messages like `RefundTxSignatureRequest`. Would those still depend on BitcoinJ's `Transaction`? If so, how will an actor that has an `Exchange` be able to generate such message (since `exchange.Transaction` might not be a BitcoinJ `Transaction`)?