Convert BinaryFunctor to public/protected interface; Unary to follow

This gets around a few messy things: Initially the *oVar thing; oVar=0 is now
represented by operator() with fewer arguments, meaning it can be a reference
rather than a pointer.  The two overloads are concrete rather than virtual,
getting around a difficulty with multiple virtual overloads of operator().
They in turn call a protected interface.  More methods mean the allocation is
separated (and defaults to something sensible).  Overall, functors should be
simpler because more things have defaults.  It should only be necessary to
implement ::scalar() or ::vector().