Updated `Forwarder` semantics.

- Added `Forwarder._forwarding_conditions`, and put it to use.
- Made the functions which handle the transition between a forwarding
state and a buffering state clearer.
- Removed sink_deferred from the forwarder. (It was unnecessarily
complicating  things. If you want to set the sink with a deferred, add a
call to setSink as a callback yourself.)

Other code which was impacted by this change was modified accordingly.
Currently all unit tests pass, and the socks proxy demo still works.
Fixed a bug in `Forwarder.__init__()`.