libstd: `Rational` requires `Integer` as type bounds instead of `Num`
libstd: `Ratio` requires `Clone` instead of `Copy`

This allows creating `Ratio<T>` which `T` is non-implicitly copyable types
such as `BigInt`.
libstd: Add tests for BigRational