Replace tb_blit version with a better one.

It doesn't change the behaviour, only extends it. Adds support for the
following conditions:
 - source buffers that are larger than the target back buffer
 - blitting to positions that are partially outside of the back buffer