[TimeZoneInfo] Fix DST bug and implement To/FromSerializedString

[TimeZoneInfo] Fix issue with some floating DST transition times creating invalid DateTime values, and implement ToSerializedString and FromSerializedString.

The DST bug (fixed in TimeZoneInfo.cs lines 979-980 and tested in DeserializeAndUseEasternTimeZone) has manifested itself in 2014 for US DST transitions, such that when trying to get the DST end date, the code would come up with 2014/11/-5 instead of 2014/11/2, which would then throw upon trying to construct that invalid DateTime object.

This change is released under the MIT license.
better to have using when SerializationException is used a lot
kill else here too