Shared-Memory Parallelism Can be Simple Fast and Scalable