Do not use GHashTable to store node attributes

Using a simple list speeds up parsing by ~15%.
Add as_node_take_attribute() to reduce allocations during parse

This speeds up parsing by a couple of ms, but reduces the memory footprint by a
few kb.
Reduce the number of small attr key allocations

Use a intern'ed string for keys as there are very few different ones.
trivial: Use a getter and setter for setting the node data name
Use gperf to generate a perfect hash for the tag names

This speeds up parsing by ~3%