jinterface: don't need another FilterOutputStream wrapper

DeflaterOutputStream is already an FilterOutputStream
jinterface: fix typo in error message if encoding fails
jinterface, OtpOutputStream: properly override the three write() methods to ensure our growth strategy

Previously, if code called e.g. write(byte[] b, int off, int len), the growth strategy of the parent class ByteArrayOutputStream was used.
jinterface: don't compress small erlang terms < 5 bytes

Compression always has at least 5 bytes (the compressed tag + original size) so we can't get a smaller external term if the original term is already smaller than 5 bytes.
jinterface: don't return compressed external term if bigger than uncompressed

Now, OtpOutputStream#write_compressed() uses the same mechanism as erts_term_to_binary() in external.c: it tries to compress the given term into a buffer of the size of the uncompressed term and if this is not possible, i.e. the compression plus headers is bigger, it uses the uncompressed external term format instead.