A couple of fixes for TimeZoneInfo.ConvertTime.

    * ConvertTime (DateTime, TimeZoneInfo) now correctly takes the date kind from the DateTime parameter
      and uses it to select the source time zone according to this criteria:

         if DateTime kind is Utc, use TimeZoneInfo.Utc as source, in all other cases use TimeZoneInfo.Local

    * Move argument checks in ConvertTime (DateTime, TimeZoneInfo, TimeZoneInfo) so that there's no risk of a NREX
      should sourceTimeZone be null.

Added relevant tests for all of the above changes.