Make Foldable more powerful.

- Add sum, product, minimum, maximum, minimum_by and maximum_by
- Add foldl1 and foldr1
- Write generic unit tests for Foldables and use that to check
the instantiation for Iterables
Accept multiple arguments in plus and mult.
Refactor CMakeLists for unit tests.
Use inheritance in strict_variadic_foldl.

This way, the fold keeps the properties of the metafunction
used to fold (or the state for empty folds). For example, if
the metafunction has a nested ::value member, then so will have
the strict_variadic_foldl because it uses inheritance.
Add ruby_gnuplot as a submodule.
Setup a small benchmarking framework.
Add TODO note to core/undefined.