Arbitrary review.

Driven by the earlier arbitrary split, this is a long overdue
review of the arbitraries used throughout ivory (but primarily)
those use in ivory-core.

This makes a number of structural changes, specifically
removing the circular arbitrary resolutions, favouring
Gen over Arbitrary for composition and making custom
newtypes for test top level with their own companions.

This fixes a couple of major issues:
  - Compile time, for a clean test:compile of ivory-core on my
    branch drops from 360s -> 40s.

  - Consistency of arbirtraries.

  - Removes large amounts of duplication.

  - Removes a few more retries.

  - Re-groups things into conceptual buckets closer to the
    underlying ivory concepts.

Note that there are a few more things that should be done,
these can be seen through out the code as a few `FIX ARB`
tags, and as the arbitrary review issue raised separately.

I thought I'd added a combinator to `GenPlus`, something like `listOfN[A](min: Int, max: Int, gen: Gen[A]): Gen[List[A]]`. Is that worth doing? I wonder if it should be using sized as well to tweak it's value slightly, but not sure.