add `compare` module with comparators
parameterize `IntervalHeap` with a comparator
add a `Borrow` comparator
remove type parameters from `Natural`

This makes using `CompareExt` with `Natural` more verbose, but it will
be necessary for alternate key lookups in maps and sets once they
migrate to comparators. The alternative is to remove the type parameters
from `CompareExt`, but this prevents it from extending `Compare`. In
practice, code like `Natural.rev()` should be rare, as data structures
will provide default constructors, allowing for code like

```rust
let heap = IntervalHeap::<u32, Rev<Natural>>::new();
```