The Origins of Lambda Calculus and Functional Programming: From Alonzo Church's Theory to Lisp and Haskell