This implements a `Natural` type for representing

unsigned arbitrary precision integers.

When available, `integer-gmp>=1.0.0`'s `BigNat` is used as constituent

to construct `Natural` as an algebraic data-type.

Otherwise `Natural` falls back being a `newtype`-wrapper around `Integer`.