Some engines are too bound to linear surfaces in 8bpp that it is very
hard to repair them. So instead of polluting the engine with
Surface::init() & delete[] Surface::getPixels() just use this
workaround.
It is also useful as an early fix for newly found engines which may be
fixable later.
The move16 routine needs not only src/dst aligned on 16 bytes but this
requirement must be honored in every iteration. Sometimes an engine
would pass a 16-byte aligned src (by chance) with srcPitch = 13 for
instance.
The routine above it where srcPitch == dstPitch works because there's
never a second iteration with unaligned pointers.
Also, a bit optimized (precalculated some of the jump offsets).