lazy evaluation and scope issue in partials
#632 Adds lazy evaluation in most scenarios. This will be most obvious in and() and or() helpers. For example, if this.foo in {{#and( this.foo, this.bar )}} is falsy, this.bar will never be evaluated.
Note that some expressions are evaluated no matter what. For example: foo[bar] is evaluated no matter what and so is looking up the method in a call expression like foo(arg1, arg2).
#639 Fixes a scope issue in partials where the scope would change.