Introduce untested domain model for the exchange protocol

### Description

Introduce a domain model for the exchange protocol. The model will be able to handle all the transactions and validations needed for it encapsulated so the rest of the codebase is agnostic about how this is done.
The contributed model is partially implemented and the behavior will be migrated from `DefaultHandshake`, `DefaultExchange` and other parts of the code to this package in a series of PRs. In this first one, the multisig creation code is moved to this package.

### Testing

Existing tests pass.

### Coverage

Unchanged for the existing code.
This class is doing two things:

- It encapsulates the step count for a given Exchange
- It measures the amount of remaining steps for a given total and a current step

I think this causes some weirdness, like a `isLastStep` function which is not composable with `pendingStepsAfter` (for example: `TotalSteps(10).pendingStepsAfter(2).isLastStep(10)`... should that be true?)