Begin experimenting with comparators

This adds a `Cmp` trait for comparators and uses it to parameterize `libcollections`'s `BinaryHeap`.
All these names are exactly the same as those in `Ord`/`PartialOrd`/`Eq`/`PartialEq`. I don't know if this will be a problem, but I could see it being confusing: `a.le(b, c)` has `a` implementing `Cmp` and comparing `b` and `c` while `a.le(b)` has `a` implementing `Ord` and comparing itself to `b`.