Implement BitOps for TreeSet

Implement the `BitOr`, `BitAnd`, `BitXor`, and `Sub` traits from `std::ops` for TreeSet.  The behavior of these operator overloads is consistent with [RFC 235](https://github.com/rust-lang/rfcs/blob/master/text/0235-collections-conventions.md#combinations).

r? @Gankro
It occurs to me that we should be documenting what these operators do, as it's non-trivial in the case of sets, as well as marking them with the "unstable matches collections..." message.

See http://doc.rust-lang.org/src/alloc/rc.rs.html#569-580 for an example of how to do this with trait impls.