work on N variables gf & add tuple_tools

- If the mesh is composite, then flatten the tuple before calling in
  triqs_auto_assign.
  Clean several aspect of product.hpp mesh

- reintroduce arity check for all gf to give better error messages

- add tuple_tools for basic functional construct on tuple :
  - apply, apply_on_zip, fold, fold_on_zip and ....
  in triqs::tuple namespace
  illustration in meshes/product.hpp : produce a much simpler and readeable code
  for all operation on sub meshes.

	modified:   doc/developer_manual/gf/concepts.rst
	modified:   test/speed/apply_on_tuple_s.cpp
	renamed:    test/triqs/utility/apply_on_tuple.cpp -> test/triqs/utility/tuple_tools.cpp
	modified:   triqs/arrays/matrix_view_proxy.hpp
	modified:   triqs/gf/gf.hpp
	modified:   triqs/gf/imfreq.hpp
	modified:   triqs/gf/imtime.hpp
	modified:   triqs/gf/legendre.hpp
	modified:   triqs/gf/local/fourier_matsubara.cpp
	modified:   triqs/gf/local/functions.cpp
	modified:   triqs/gf/local/legendre_matsubara.cpp
	modified:   triqs/gf/meshes/discrete.hpp
	modified:   triqs/gf/meshes/linear.hpp
	modified:   triqs/gf/meshes/mesh_tools.hpp
	modified:   triqs/gf/meshes/product.hpp
	modified:   triqs/gf/refreq.hpp
	modified:   triqs/gf/retime.hpp
	modified:   triqs/gf/tools.hpp
	deleted:    triqs/utility/apply_on_tuple.hpp
	new file:   triqs/utility/tuple_tools.hpp