Do fringe scale for everything but ABYSS_LOOP (bug 712524)

Pixels at the edge of a scaled read will be processed without
using mipmaps to avoid including invalid edge pixels. A scaled
read of abyss loop will never use mipmaps.

This is all a bit overzealous about not using mipmaps, instead it
could check whether the abyss rect is a sufficient power of 2 at the
requested zoom and only do the direct scale if that fails. But for
now this provides a correct staring point to something more optimized.
BackendSwap: Avoid allocation in get_tile

Allocating the key on the stack makes the performance identical
to backend ram when nothing has been swapped.