Make NSSet -map behave like -valueForKeyPath for nils

This fixes a crash when the given block was returning `nil` in -map.
Also, it doesn't put anything inside the returned array if the block
returned `nil`.

This behavior is different than NSArray `-map`, and not sure that'll
be the final behavior. At the end of the day, We want to make our
ifes easier and more predictable.