Add numberOfLocalDoFs() for Generic- and BlockFunctions
Our usual tag-based approach to the numberOfLocalDoFs() free functions cannot work with Generic- and BlockFunctions, as for those we need an object instance of the class to determine that value. In order to remain somewhat compatible with the current approach this commit adds a version of numberOfLocalDoFs() that takes as input a function object. For our standard function classes work is then delegated to the existing free functions by determining the function tag. For the Generic- and BlockFunction we have special implementations that call their getNumberOfLocalDoFs() member function. For the case of the GenericFunction this member function is implemented by this commit. As usual it is purely virtual and the actual implementation happens in the FunctionWrapper class. We use this new function variant in the construction of PETScVector for testing and as this is where we will need it when converting GenericFunction objects to PETScVector objects. Additionally this commit implements enumerate() without an offset in GenericFunction and FunctionWrapper.