[DDMD] [refactor] Move op_overload into a visitor class

Fun fact: the `op_overload` functions in `BinExp` and derived classes were _not_ overrides of `UnaExp::op_overload` and were not virtual, as `UnaExp` is not a base class of `BinExp`.  This worked because they were always called from semantic which has the correct dynamic type!

DDMD would have caught this, but I'm compiling with -d because I'm not emitting `override` correctly.