The Guarded Lambda-Calculus: Programming and Reasoning with Guarded Recursion for Coinductive Types (Logical Methods in Computer Science, 2017)