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).
`vec![1,2,3].into_iter().collect()` is a bit easier imho. If you prefer avoiding the heap allocation (fair), you can do `[1,2,3].iter().cloned().collect()`.