Begin experimenting with comparators

This adds a `Cmp` trait for comparators and uses it to parameterize `libcollections`'s `BinaryHeap`.
If I remove the type parameter(s) from `Natural`, then `test_rev` fails to compile:

```
error: unable to infer enough type information to locate the impl of the trait `core::cmp::Ord<_>` for the type `_`; type annotations required
let c = Natural.rev();
                ^~~~~
```