When the protocol (task) expires user ProtocolExpired() exception inside
its chain for the sake of better error reporting.
Define and fix the behaviour of cancelling the requests done with httpclient.

Add basic tests for the client protocol.