[functions.interfaces] another overhaul
* dimRangeRows is now called dimRange, since dimRangeCols == 1
  seems to be the usual case, so dimRange will be the only one
  of interest
* we only need to distinguish the different types at the top level,
  so only LocalfunctionSet needs a specialization for
  dimRangeCols == 1
* the JacobianRangeType for dimRangeRows > 1 is set to std::string,
  since we need a type but it is uncleat what it will be
* instead of a shared_ptr, we let local_function() return a
  unique_ptr
[functions.constant] adapted to new interface
[functions.combined] adapted to new interface
[functions.expression] adapted to new interface
[functions.checkerboard] major rewrite
* adation to new interface
* there was a major problem when a discontinuity was
  on an intersection. Evaluationg on the intersection
  lead to undefined behaviour. So now we assign the value
  of the local function according to the center of its
  entity only. This leads to a locally constant function,
  so the grid better resolves the discontinuity!