Add ContextContextManager

Add Context.with method

This patch allows you to use a context with "with", so you can be certain whatever context you push on the stack is popped after.

```python
with context.with(extra_data):
    return self.blocks.render(context)
```