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.
Moved to using ParsePosition directly: allows the code to detect strings that don't match the standard form exactly, e.g. ones that end in GMT+01:00. parse() with the new 'GMT' format would just ignore the +01:00, which was a problem.