Added function to split name into (most likely) first name and last name
Improvements to EncodeStringDictionary

It accepts an IDictionary instead of Dictionary so as to support
SortedDictionary, ConcurrentDictionary, etc.

Also now uses the correct EncodeUriData instead of EncodeUriString
Added heuristics to determine whether or not an email address is valid
Invalid domains don't repeat enough to make it worth caching them