Added an Endpoint system

Need to add some tests to this.

/cc @blabaere 
I forgot to add a marker type here. It needs to be a Contravariant lifetime as per the `Endpoint` type.