Don't need to deref function pointer to use it
Massage the make_functor_arrfunc macro metaprogramming code

Move complicated bits into individual macros, so the macros
defining the main code don't have complicated macro
metaprogramming in them.

Make the functor type a template parameter, to be able to
reuse the code across multiple function object types.
Restructure the functor_arrfunc code to handle return via ref param