alternative implementation using String (wip)

benchmark code in sieve.ml
result: strings are roughly 3x faster