Add laws for NRoot[A].

This commit adds laws for NRoot instances. However, due to
issues with approximation, we don't currently have a type
which can pass these tests.
Restructure Rat, and fix bugs in ceil/floor/round.