Factoring out protocols into its own library. The reason for this is to allow a Jig component to depend on jig.Lifecycle without bringing in all the Jig tooling.