Parallelized version

Doesn't give much speedup (about 1.6x on 2 cores in my tests).
Have tried a few different strategies from Control.Parallel.Strategies,
but this seems best.
Recursive application of parallel strategy produces too many sparks.
Also tried setting a threshold on the length of validItems above which
parallelism is used, but it didn't make much difference.