Fix BitvSet union_with and symmetric_difference_with

Updates the other_op function shared by the union/intersect/difference/symmetric_difference -with functions to fix an issue where certain elements would not be present in the result. To fix this, when other op is called, we resize self's nbits to account for any new elements that may be added to the set.

Example:
```rust
	let mut a = BitvSet::new();
	let mut b = BitvSet::new();
	a.insert(0);
	b.insert(5);
	a.union_with(&b);
	println!("{}", a); //Prints "{0}" instead of "{0, 5}"
```
Yeah, I think insert might be wrong? This structure has been plagued with implementation errors for a while (as you have just discovered). When a new word is added to the Vec, it's definitely zero'd out by reserve:

```
pub fn reserve(&mut self, size: uint) {
   let old_size = self.storage.len();
   let size = (size + uint::BITS - 1) / uint::BITS;
   if old_size < size {
      self.storage.grow(size - old_size, 0);
   }
}
```

Bits are explicitly zero'd in remove, clear, and pop. @apoelstra's commit message suggests that these bits might somehow become indeterminate, but I can't see how. Maybe this is futureproofing for future optimization?

@apoelstra, any insight?