Minimal template engine with default escaping