add `compare` module with comparators

Take two. The heap code will follow later.
`Rev` does not have a default type of `Natural`, and it actually cannot have that be the case because `Natural` is itself parameterized by `Lhs` (crucial for type inference), which would have to be added as a parameter to `Rev`. You would never be able to write
```rust
let cmp = Rev;
```
anyway, because `Rev` contains a field, which is the comparator that it is reversing. We _could_ make the field of `Rev` (and the other adapters) public, like
```rust
pub struct Rev<C>(pub C);
```
and then you could write
```rust
let cmp = Rev(Natural);
```
without importing `CompareExt`, but you would still have to import `Natural` and `Rev`, obviously. One positive effect of making those fields public (and it's unlikely that the representation would ever change for adapters that are so simple) is that the adapters could be used in constant expressions. The benefit of `CompareExt`, which would presumably be in some kind of prelude once we get those, is that you don't have to `use` the individual adapter types.