Optimize Set#union for better performance when receiver is small Set and arg is large Set

mentioned as a suggested optimization in issue #136 .

Also added test case to verify that `Set#union` returns indeed an object of the same class as the receiver.