add `compare` module with comparators

Take two. The heap code will follow later.
If we redesigned the entire module, you could have:

```rust
trait Compare<Sized? Lhs, Sized? Rhs> : for<'a> Ord<(&'a Lhs, &'a Rhs)> { ... }
```
Again, it goes against the point of the `Ord` trait, but it's possible.