* No longer panic when updating self peer ID in kbuckets
* Minor code improvement in flush()
* Small improvement to handle_find_node_req
* expected_pongs no longer mut
* Clean up KadServerInterface trait
* find_node() returns an impl Future
* Rework kad_server's API to remove the interface
* Remove the error mapping in kad_bistream.split()
* Use a name type in protocol.rs
* respond() now takes an iter of Peers + add tests
* Use concrete Future type in kad_server upgrade
* Let the high level code decide the TTL of the addrs
* Replace QueryInterface::send with find_node_rpc
* Replace KademliaProcessingFuture with KademliaPeerReqStream
* requested_peers() now returns an iter
* gen_random_id() only requires &PeerId
* Remove QueryInterface and return stream of events
* Remove add_peer_addrs from query
* Remove the peer_store and record_store params
* Tweak multiaddresses reportin
* Remove dependency on peerstore
* Fix tests
* Rename Transport::RawConn to Output
* Remove AsyncRead + AsyncWrite bound on Transport::Output
* UpgradedNode now always implements Transport
* Add and tweak modifiers for Transport and ConnectionUpgrade
* Secio upgrade now returns the pubkey in its output
* Add upgrade::apply
* Add Transport::and_then
* Rework the swarm
* Rustfmt
* Fix concerns
Currently, connection substreams are added to
`connection_reuse::Shared::active_connections`, but never removed. This
is not least because the `StreamMuxer` trait defines its inbound and
outbound substream futures to always yield a substream and contains no
provision to signal that no more substreams can be created, which would
allow client code (e.g. `ConnectionReuse`) to detect this and purge its
caches.
This PR defines the `StreamMuxer` trait to optionally yield
inbound/outbound substreams and changes `libp2p-mplex` to handle
stream EOFs by marking the underlying resource as closed.
`ConnectionReuse` will remove stream muxers from its active connections
cache if a `None` substream is returned.