Tapping into Parallelism with Transactional Memory