Fix return type printing for defs, vals and vars

The return type of a symbol was wrongly printed in the it doesn't yet
exist in the sources but it was added by a tree transformation.

The return type needs to be set by calling `setOriginal` on `TypeTree`
in order to print it explicitly in the output.

This also adds a `ReusingPrinterTest` class, which can be used to test
the printer output after tree transformations.