Generic implementation for QuickCheck's Arbitrary
