Make the ENDPOINT module type not explicitly depend on Vchan

We do this by making `port` an abstract type that is substituted
in from the functor applications.