[Dependencies] Reimplement per-codim containers to remove Boost dependency

With our current compiler version requirements, we can rely on support
for std::tuple and variadic templates, so we can get rid of boost::mpl
and boost::fusion. Yay!

So this patch replaces the fusion::vector that stores the per-codim data
structures with a std::tuple, which also makes for much more
understandable code. Moreover, I also found a bunch of unused helper
code built on top of the boost libraries, which also goes out of the
window with this patch.

On the other hand, I added TypeTree as a new dependency, as it has some
nice infrastructure code for iterating over a tuple that I did not want
to duplicate. But I think replacing the Boost dependency with TypeTree
is a win, all things considered.