Make function output from locals autoescaped, keep macros safe

Continuing work from @andrewrk from gh-494

Slightly alternative approach, albeit, potentially crazy... Uses a `String` object to mark the actual string itself as `safe`. When the `escape` filter hits a `String` object, it checks if the input is `safe`. If it is, just returns the string value and continues on.
That's correct... I should maybe clarify this function. The point is to determine if it's a "string object" (ie: `a = new String()`), not a string primitive (ie: `b = 'foo'`).