Adds a variant-type filter

Also correctly calculates true/false/pos/neg etc for SVs.
Does `let` change the semantics of this? Because if it doesn't, this is a [bad idea](http://stackoverflow.com/questions/500504/why-is-using-for-in-with-array-iteration-such-a-bad-idea).