Refactored the StringPool and Identifier classes to store the identifiers as Strings, so that they can be shared with other classes like XmlElement without creating temporary or copied String objects. Also added garbage collection for the pooled strings, and changed XmlElement to pool all of the strings it uses, to reduce memory footprint in large XML trees with many identical names. Also refactored NamedValueSet to use an array instead of a linked list.
Avoided static-order-of-initialisation problems from causing crashes in the Time::getMillisecondCounter function.