[DDMD] [refactor] Move Expression::apply into a visitor class

I've only moved the first few `apply` consumers in this pull, because there are lots and I still have to work out what to do with the ones in interpret.c.

The old apply api is supported with a trivial wrapper visitor in `Expression::apply` for now.