Modified zone_alloc() expansion behavior
Modified zone_alloc() expansion behavior

This commit changes the way zone allocators expand their footprint.
Instead of performing three malloc()'s per expansion, the new
zone_alloc() performs a single malloc(), and sets all member
pointers to locations within the malloc()'ed block.

This is faster for two reasons.

 1. One-third the number of previous calls to malloc().
 2. Memory locality of Zone pointers and their data members.

This leaves one last important addition: deallocation of unused
temporary objects.

geekysuavo/matte,geekysuavo/matte,geekysuavo/matte