Shrinking of counterexamples, API redesign

- Flesh out the Generators

- Rename Arbitrary to Domain, and add shrinking of counterexamples

- Move the implementations for the primitive type random generators to a
  PrimitiveDomains module

- Redo the API, and include a bridge to OUnit