Let a seed or RandomGen be passed in.

Much of the module is now out of the IO monad and a given grid may be
deterministically be remade given the same random number generator.