Allow early exit from iteration
Reuse buffer in FuncIter

benchmark                   old ns/op     new ns/op     delta
BenchmarkContainsSmall      9849          9376          -4.80%
BenchmarkContainsMedium     1102          1125          +2.09%
BenchmarkContainsLarge      23068         22995         -0.32%
BenchmarkIntersection       77927944      79280757      +1.74%
BenchmarkUnion              63946927      65113817      +1.82%
BenchmarkSet                976           997           +2.15%
BenchmarkSetNoCheck         234           205           -12.39%
BenchmarkFind               447           463           +3.58%
BenchmarkWrite              26703287      27312719      +2.28%
BenchmarkRead               248           254           +2.42%
BenchmarkIterateChan        302307870     303951116     +0.54%
BenchmarkIterateFunc        125543508     30087392      -76.03%

benchmark                old MB/s         new MB/s         speedup
BenchmarkWrite           748.97           732.26           0.98x
BenchmarkRead            804210824.72     786882733.14     0.98x
BenchmarkIterateChan     69.37            69.00            0.99x
BenchmarkIterateFunc     167.05           697.02           4.17x