idempotent unescape

If we examine the XML spec for entities, we find that ampersand and
space are not allowed characters in an entity name. I've also modified
the unescape function to not modify unexpected inputs (such as &foo;).
This is a common best practice when dealing with layered systems.

http://www.w3.org/TR/REC-xml/#sec-references

EntityRef   ::=   '&' Name ';'
Name   ::=   NameStartChar (NameChar)*
NameChar   ::=   NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
NameStartChar   ::=   ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]