Jpeg exif

Some JPEG files might have corrupted Exif tags (or the Exif parsing is flawed, not sure). In any case, FastImage fails on those because the Exif parsing reads beyond the APP1 block.

This PR solves this by reading the APP1 block into a string and parsing the Exif from that string. If the exif parsing fails, no biggie, we continue with the rotation info.

To do this, I gradually isolated the reading into a new `FiberStream` class and the Exif parsing into its own class. I broke it down into reasonably small commits, each should be reasonably easy to follow.