inspired to understand this from:
- http://raganwald.com/2013/03/28/trampolines-in-javascript.html
- http://bilby.brianmckenna.org/#trampoline see http://en.wikipedia.org/wiki/Trampoline_(computing)
compare with https://github.com/Gozala/js-tail-call/blob/master/core.js for speed (after refactoring to work like his does)
great job, nice tight and elegant code. as discussed, the only drawback is you can't return a function from the recursion.