Pass visitor by `auto ref`

Passing the visitor by `ref` doesn't work anymore with DMD master since this PR was merged:
https://github.com/D-Programming-Language/dmd/pull/3761

Because the visitor is a class which is already a reference, passing it by `ref` actually passes a reference to the reference (= local variable on the stack), which is wrong. The PR forbids this by making `this` in classes an rvalue.
union do not make any sense.