This commit is incomplete: only the seller side currently checks. The code will be refactored out into subprotocols in further commits. Note that timeouts are currently unhandled.
Project Contracts depends only on core.