------- Copy 17 bytes from BUFFER to TARGET
before: buffer = |0123456789abcdefXXXXX|
before: target = |---------------------|
after:  buffer = |0123456789abcdefXXXXX|
after:  target = |0123456789abcdefX----|

------- Destructive overlap #1
before: |012345678901234567890|
after:  |000000000000000000890|
------- Destructive overlap #2
before: target = |---------------------|
after:  target = |-xxx-----------------|
------- Destructive overlap #3 (max length)

------- Non-destructive overlap  buf[0:4] = buf[10:14]
before: buf = |0123456789abcde|
after:  buf = |abcde56789abcde|

------- Move inverse 17 bytes from BUFFER to TARGET
before: target = |-xxx-----------------|
after:  target = |Xfedcba9876543210----|