Reduce memory usage during writing

There are two main changes here.

The first removes the hash of seen nodes that we used while iterating through the tree. Instead, alias nodes have a new type that is separate from the NODE type. They are treated the same everywhere *except* in the aliasing code.

The second replaces the SV * key in the MMDBW_record_s struct with a char *. This required going back to using uthash for the data records.