improve runtime expression error description - fix #236

This PR improves runtime error descriptions involving expressions. This is done in 3 steps:
- first, by adding a *toCode()* method to each expression. This method simply rebuilds the expression code from the compiled version.
- second, by modifying the compiler to add an extra parameter to expressions that reference global objects. In the previous implementation the "global" identifiers were indeed not passed, which prevented to see the expression in the error message (this was the case in issue #236)
- and last, by updating the current error descriptions to include a call to *toCode()*

To be complete a 2nd change should be also done to the compiler to pass the file name to the compiled template function (and then include it in all error messages) - but this can be done in a separate PR as code is independent from the current changes.