All direct access Block/Map types should be unified so as to reduce as much as possible the number of template instantiations. E.g. Block<Block<Matrix>> is just a Map. This could mean that the return type of block(...) becomes an internal thing that we must always hide behind a BlockReturnType helper.
This could also safe some duplicate information in the Ref<> class.