libs: Add borrow module, deprecate _equiv and friends

Following [the collections reform RFC](https://github.com/rust-lang/rfcs/pull/235), this PR:

* Adds a new `borrow` module to libcore. The module contains traits for borrowing data (`BorrowFrom` and `BorrowFromMut`), generalized cloning (`ToOwned`), and a clone-on-write smartpointer (`Cow`).

* Deprecates the `_with` family of methods on `TreeMap` and `TreeSet` by instead generalizing the "normal" methods like `get` and `remove` to use the new `std::borrow` infrastructure.

* Deprecates the `_equiv` family of methods on `HashMap` and `HashSet` by instead generalizing the "normal" methods like `get` and `remove` to use the new `std::borrow` infrastructure.

[breaking-change]
If I understand correctly, this assumes that the implementations of `Hash` and `Eq` for `Q` and `K` are compatible, right? That is, for any `k1` and `k2` of type `K`:
```rust
let q1: Q = BorrowFrom::borrow_from(k1);
let q2: Q = BorrowFrom::borrow_from(k2);
assert_eq!(make_hash(q1), make_hash(k1));
assert_eq!(q1 == q2, k1 == k2);
```
That invariant unfortunately doesn’t seem like it can be enforced by the type system, but maybe it should be documented?

The problem was the same with `Equiv`. We ran into it in Servo when trying to make hashing of interned strings `O(1)` by only hashing the internal `u64`.