Switched to class-based approach

The major changes implemented by this pull-request are:

- [x] Switched from a single `ast.Expression` node to a complex `ast.Module`
- [x] Using a single `class` per template. Each `Template` will have a start function `root` which will effectively be called with the render context. Template inheritance is eventually just class inheritance. Blocks will be additional functions inside the class which automatically allow `super()` calls as well as being called from other functions (nested blocks).