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 think we can backtrack on the abstract types and use the `bitcoinj` types. I propose to use a package object to selectively rename though typedefs, and and some stuff to the types provided by `bitcoinj`. This way, we can have some of the advantages of the current implementation without the drawbacks.