make RandIntGen stop handling "full range" random generation

The rand(T) function is already the normal way of generating random values
spanning "full range" of T. So let's make RandIntGen less powerful in the
name of orthogonality and simplicity.

Also tried to clarify a bit the `maxmultiple` comments.
factor out common code in rand(::RandIntGen) methods

And simplify method signatures: creation of RandIntGen instances
is controlled by `randintgen`, so the type constraints were useless.