Divide Num into separate traits

As part of the numeric trait reform (tracked in issue #4819), I have replaced `Num` with three traits, named according to mathematical conventions.

~~~rust
pub trait Semiring: Eq
                  + Add<Self,Self>
                  + Mul<Self,Self>
                  + Zero + One {}

pub trait Ring: Semiring
              + Neg<Self>
              + Sub<Self,Self> {}

pub trait Field: Ring
               + Div<Self,Self>
               + Rem<Self,Self> {
    pub fn recip(&self) -> Self;
}
~~~

You might think this is a tad excessive, but it's useful when you want to define these traits on other mathematical structures such as vectors and quaternions that don't satisfy all the operations required by the old `Num`.

I have also renamed `Orderable` to `OrderedRing`, which is the correct mathematical name. It should really require `TotalOrd`, but we are constrained by the fact that it is not impled by floats.