Sisal: Automatic Parallelization & Optimization of Single Assignment Languages