Works across functions and generates simpler and faster code than #701.
Works even across files when used in conjunction with `runtime` option.
Closes#256.
As per ES6, VMs should perform tail call optimization and prevent growth of call stack.
This adds tail call optimization for recursion case (when function has explicit name and calls itself in `return`).
Cross-function optimization is not currently performed as it's more complicated and requires value tracking.