Builds a default Arbitrary instance for a type. This requires
that all members are of types that already have Arbitrary
instances, and that the arbitrary instances are well behaved
(w.r.t. recursive data structures, or similar concerns). In that
sense, this is not appropriate for all data types, just those that
are simple but very repetitive or have many simple fields.