Fix formatting / parsing for Android

Ensuring that this Android bug is fixed for the next Android release:
https://code.google.com/p/android/issues/detail?id=66135

On Android the SimpleDateFormat for "zzz" returns GMT+00:00.
This is regrettable but awkward to change as it is existing
behavior.
https://code.google.com/p/android/issues/detail?id=66136

This change also fixes a bug where the default timezone
is used for parsing non-standard date/times.

This change also fixes a bug where the timezone from one parse
could leak into another.
You're right - it does put it back on Android (and probably Oracle's JDK, not checked).

Oracle's Javadoc for setTimeZone() says "The TimeZone set by this method may be overwritten as a result of a call to the parse method.". Helpful, eh? Suggests the possibility of needing to call setTimeZone().

However, I realized after I sent it out I can move the line to when the DateFormat is created (to avoid use of the platform default). None of the DateFormats are used for formatting so it doesn't matter what TZ is used for generating strings for but for parsing.... The formats either have the timezone dictated by the string and so are unambiguous (and it doesn't matter whether the format.setTimeZone(GMT) was called, yay), OR they don't have a timezone element ('z' or 'zzz'), and would be using the platform default to interpret the string. The second sort should have format.setTimeZone(GMT) called otherwise they would use the platform default. It's easiest just to force the TZ to GMT in all cases to cover the second case.

I'll document parseNonStandardTimeZone() test and add another test to make it clearer.