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.
Fringe benefit: reusing the ParsePosition avoids creation of ParseException in some cases. I used position.getIndex() != null instead of position.getIndex() == value.length() to retain the existing lenient behavior around trailing junk (there are tests for this).