Half way through converting math operators to functors

Addition and subtraction are done, but not necessarily optimally.  The
implementation should depend on whether the underlying function overwrites or
writes to new storage.  Multiplication will depend on whether it's elementwise
or scaling.