(Fixed minor oversight in class name shortener.)
(a) Added non-public AST "deep" (down to Expression-level) traversal API (b) Many random smaller fixes/cleanups here and there, as I ran into them.
(a) details: As an example of using it, see test/freemarker.core.ASTPrinter. Yeah, it's a bit convoluted, especially to implement, but this is why it doesn't affect parsing or execution speed at all.
(b) These are mostly only code cleanups. But I have fixed the new boolean formatting after I have borken it with the last classic_compatible patch. I don't remeber more...
Changed log error message so that it matches that of the FreemarkerServlet.
Added "blamer" to UnexpectedTypeException messages automatically, using the AST traversal API.

That is, where earlier it said:

Expected an extended-hash or sequence, but this evaluated to a string (wrapper: f.t.SimpleScalar):
==> x  [in template "adhoc" at line 1, column 20]

Now it says:

For "?size" left-hand operand: Expected an extended-hash or sequence, but this evaluated to a string (wrapper: f.t.SimpleScalar):
==> x  [in template "adhoc" at line 1, column 20]