Reapply "[rust png] Extract minimal `SkPngCodecBase`."

This reverts commit eb5f21e12ece171795d2c701c073af8df4b55c21.
This reland is possible, because Flutter issues have been addressed by
https://github.com/flutter/engine/pull/54781
Original commit description:

This CL extracts a minimal `SkPngCodecBase` - a common base class
of `SkPngCodec` and `SkPngRustCodec` with functionality shared by both
of these derived classes.

Bug: chromium:356879515
Change-Id: I7e49e3d5ef07d2ea96cb445b524a798954beeba2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/893460
Auto-Submit: Ɓukasz Anforowicz <lukasza@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Reviewed-by: Kaylee Lubick <kjlubick@google.com>
8 files changed