add `compare` module with comparators

Take two. The heap code will follow later.
Per the `FIXME`, I agree, and this will be changed to a method once we can do something like;

```rust
fn max<'a>(&self, lhs: &'a Lhs, rhs: &'a Rhs) -> &'a Lhs where Lhs = Rhs { ... }
```

To add it as a method right now, we would have to introduce something like

```rust
trait CompareOne<Sized? T> : Compare<T> {
    fn max<'a>(&self, lhs: &'a T, rhs: &'a T) -> &'a T { ... }
}
```