Divide Num trait into Semiring, Ring, and Field. Rename Orderable to OrderedRing.

These names follow the mathematical conventions. The greater fidelity of these traits allows them to be used on other mathematical structures such as vectors and quaternions.
Add `zero` and `one` wrapper functions