According to code comments the original motivation was to allow for malloc_type_internal changes without ABI breakage. This can be trivially accomplished by providing spare fields and versioning the struct, as implemented in the patch below.
The upshots are one less memory indirection on each alloc and disappearance of mt_zone.