rational: make sure Hash agrees with Eq
rational: make sure Hash agrees with Eq

We can't use a derived `Hash` when we have a manual `Eq`, because we
need to uphold the invariant `a == b` → `h(a) == h(b)`.  Since `Eq`
doesn't require them to be in reduced form, `Hash` also needs to be
normalized.

rust-num/num-bigint,rust-lang/num,koverstreet/num,koverstreet/num,rust-num/num-traits,rust-num/num-integer,rust-num/num,rust-num/num,rust-num/num-bigint,rust-num/num-integer,rust-lang/num,rust-num/num-traits