* by default an empty class is used and the library behaves as it already did
* if a user explicitly adds a base class (last template parameter) each node inherits it
* this can be used to add custom extensions (e.g. add metadata / visitor methods)
* add test for this feature