Endpoint refactor

* replace `(*Endpoint).AddHandler()` with `(*Endpoint).Listen()`
* rewrite `Endpoint` to remove the run loop

`Listener` interface:

```go
func (*Endpoint) Listen(typ string, reliable bool) *Listener

type Listener struct {}
func (*Listener) Close() error
func (*Listener) Addr() net.Addr
func (*Listener) Accept() (net.Conn, error)
func (*Listener) AcceptChannel() (*Channel, error)
```