Make SetIntersection and SetComplement skip a function call if there are no items to actually do anything with.
Make the SimpleSet constructor filter out any non-existent values for the splatted arguments to add.

We found in our application and very occasionally in the tests calling `new Batman.Set` to have a length of one and the item `undefined` be in the set. So, so weird. We couldn't reliably reproduce the issue nor figure out any sort of pattern to trigger it more often either. I caught a breakpoint once or twice where calling `newSet = new Batman.Set;`, missing braces, would have `arguments = [undefined]` in the Set constructor. This to me smells like an bug internal to the VM, since it was completely inconsistent, contract violating, and unlike anything I've ever seen before. So, we get around it for the time being by disallowing submission of undefined or null as one of the arguments to the Set or SimpleSet constructor. You can still explicitly `set.add(undefined)` later if you want.