operations: improve shift.c

- don't allocate anything, use gegl_buffer_copy instead
- simplify a lot the implementation
- don't enforce the pixel format

though the abyss is enforced to _NONE due to the use of gegl_buffer_copy.