Instead of storing everything in key / value pair hashes, we store as much as possible in an array and then reference the items in the array using metatables.
This provides us with a much lower memory footprint and just one level of table lookup indirection (so I think the speed will not be noticeably different)
It is not 100% clear that we've gotten ALL the memory leaks, but it
seems much much much better and doesn't look like it's going to die
immediately or as often anymore :)