separate processEmpty method
rewrite firing request callbacks and request timeouts

Fire deferred from Requester instance, not from protocol instance.
Handle request timeouts inside Requester.

Remark: I started using nested functions - it makes the code much more
readable, but might be slower.
rewrite firing response callbacks and response timeouts
fix bug in generatenextBlock2Request

Block1 option must not be present in requests after whole request
payload is transmitted
add new error type MissingBlock2Option
add callbacks for blockwise requests

Usecases:
- progress bars
- monitoring size
- other
add basic support for double-stack operation