scrub and resilver zios needlessly decompress data when they don't need to (the will need to decompress some
metadata to do the traverse).
If zio->io_flags has ZIO_FLAG_SCRUB or ZIO_FLAG_RESILVER set we should be able to skip adding decompression
to the pipeline. That trivial fix however doesn't work and causes an ASSERT to trip due to the io size. So we need to be a little more cunning that than and work out wither we need to do the decompress based on the object type.