Major refactoring

This changes the API to expose a structured data type instead of a String as a result type. One can call the userRepr method on this structured data to obtain a String as before if no special treatment is needed. However, if would like to do some special treatement or print the result in some custom way, it is possible to analyse the structured data type.

- decoupling the structure and the printing makes for better separation of concerns
- a major opportunity to avoid code duplication between ValDef and DefDef was sucked in to this change
- output Strings are now tabulated for easier reading of results
- possibly other fixes got sucked in to this major change fortunatly or unfortunatly

A large part of the main test cases were commented out in order to make this change less humonguous. Next commit should be converting the rest of the test cases from String expectations to the structured data output.