More types3 cleanup in the optimizer

Remove lots of generic interfaces, base classes and other kinds of indirection, formerly in support of two kinds of expression, which there no longer are. Change looks bigger than it is because of lots of copy and paste. This kind of refactoring fails (1) to compile or (2) with stack overflow due to a method calling itself when it used to call some other object. Which seems unlikely as tests continue to pass. Also without conflicts with the other pending big set of changes.