This feels a bit complex to me  while it seems `Payload.define` could be just `Payload.bind(schema)`. Of course it means `Payload(values, schema)` has to become `Payload(schema, values)`.