more readable arbitrary instance
cleaned up test groups
Arbitrary is Applicative, so don't bother with liftM