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.
Add another `port` -> `Vchan.Port.t` alias
Merge pull request #52 from avsm/master

Make the ENDPOINT module type not explicitly depend on Vchan