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