A Survey of Sequential and Parallel Implementation Techniques for Functional Programming Languages