Better error messages for template.VariableDoesNotExist

Instead of unhelpful error messages like "AttributeError: 'str' object has no attribute 'render'", we should throw an exception that helps you find the undefined variable.

I couldn't figure out how to get the template engine not to swallow VariableDoesNotExist exceptions, so I wrapped it in a plain Exception.

`render_root` remains untouched despite the new implementation, because it is call in other places.

fixes #64