Using one index was causing the end of gifs to be cut off if the number
of frames wasn't a multiple of the preload size. This creates a second
index to track the preload position and the display frame position.
Loading the all the frames of a GIF at once into memory helped cut down
on the memory footprint because we could eliminate the need to hold onto
the source image. However, we see this break down when there are too
many frames. The "almost_nailed_it.gif" GIF has 545 frames and would
crash the app around 130 loaded. This brings back progressive loading
with a max frame count of 50 to prevent this issue.