EdLambda: Putting the Skeletons back in the Closet: Effective Parallel Programming in Erlang