Begin experimenting with comparators

This adds a `Cmp` trait for comparators and uses it to parameterize `libcollections`'s `BinaryHeap`.
`Rev` could still swap the arguments, but it would have to implement `Compare<Rhs, Lhs>`, not `Compare<Lhs, Rhs>`. However, I don't think that this is a big issue, as if `A: Ord<B>`, hopefully `B: Ord<A>`.