Implement BitOps for TrieSet

Implement the `BitOr`, `BitAnd`, `BitXor`, and `Sub` traits from `std::ops` for TrieSet.  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).
Is the `::<TrieSet>` annotation necessary? This should be easily inferred by the compiler (if it's not, we should be logging an issue).