Add support for: tag, attributes and classes.

The current iteration on views uses a standard container (block level - div). Some views might
want to have a different container (button, span, table), some views might also want to add
custom classes to reflect a certain state.

The current approach adds a template function that consumes the context, and call the
describe method on the parent (current view.) and alter the different values. Only one method
is provided to perform all those changes.

Code in template will look as follows:
```jinja2
{{ describe(button, classes=[some, classes], attrs={data-row-id: id}) }}
```

This method can only be called one time, so if the tag, classes or attributes need to be changed
temporary variable should be used through the code.

@mymac80