Deny missing documentation and all warnings for cleaner builds.
Use the same dynamic-dispatch based approach for Server Requests as Responses.
Use dynamic dispatch for client Request and Response through Box<NetworkStream>

Also adds a convenience `abstract` method to NetworkStream for creating
Box<NetworkStream + Send> from a NetworkStream.
Update benchmarks and introduce more default type params for remaining generics

The client benchmarks did not have to be changed at all for this whole
refactor, and the server benchmark only had to specify a single type parameter,
and only because it writes out the type of Listener, which is not normal
usage.