Calcs with undefined rationals throw ArgumentError
Previously a calculation such as `(0//1) / 0` would result in a
`DivideError` which does not adequately inform the user that `0//0` is
not a constructable rational. Now an `ArgumentError` occurs which states
"invalid rational: zero(Int)//zero(Int)".
This change should allow errors from more complicated operations like
`std([1//1])` be easier to understand.