A generic collector that asynchronously waits for a complete set of values, as defined by the properties of a provided data class, and assembles them into a new instance of that class.