Handle unicode surrogate pairs

Prevents "System.ArgumentOutOfRangeException: A valid UTF32 value is between 0x000000 and 0x10ffff, inclusive, and should not include surrogate codepoint values (0x00d800 ~ 0x00dfff)." when encountered.

See:
http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters#Surrogates
http://kevin.sb.org/2008/11/10/webkit-and-handling-of-surrogate-pairs-in-html-entities/
http://csharpindepth.com/Articles/General/Unicode.aspx