Hegel, a universal property-based testing protocol and family of PBT libraries