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.
This avoids a problem below with the position.getIndex() == value.length() check.