add missing GPL headers
Refactor task execution

- Move a lot of logic from RsyncLocal, RsyncClientSession and
  RsyncServerSession into Generator,Sender and Receiver:

  - They all indirectly implement Callable.

  - They directly supports closing of underlying channels if they
    aren't interruptible.

  - Receiver and Sender will directly wait for EOF before returning
    from call if necessary.

  - Receiver.call will always stop the generator before returning.

- Move all task handling into RsyncTaskExecutor rather than
  duplicating this in RsyncLocal, RsyncClientSession and
  RsyncServerSession.

- RsyncTaskExecutor will now properly wait for all threads to
  terminate before returning, making sure exceptions are logged in the
  order they occur.