Fix compile-time problems for empty blocks and blocks in arrays

This also requires a record-id for all block objects. Otherwise, they
cannot be identified by array deserializers.
Use constexpr throughout the templates
Rename deserializer_{array=>iterator} and testcases