EndpointImpl: use ListenerPipe instead of HandlerPipe
add Endpoints.wrap()
 - refactor AbstractEndpoint out of EndpointImpl
rename EndpointImpl -> PipedOutputEndpoint, take Pipe as argument
 - let Demuxes take Pipe as argument, too