Gzip filter shouldn't require its source to be peekable. Refs #3723.
In a recent version, the gzip filter stopped working for array sources,
this is because it started to require them to be peekable, which they
aren't and can't be because the peek interface modifies the source,
which for an array source is immutable.
Looking at the implementation, gzip decompressor has an internal class
to emulate a peekable source, which calls the putback member on the
original source if it runs out of space (requiring the source to be
peekable). It shouldn't really need to do that so I changed it to throw
an exception instead.
If it does need to do that, we could change it to store the character
that was put back at the beginning of the string instead.