WIP: refactor into stream interface

Hey!

This is an attempt to the refactoring design discussed in MAAS week.

@robert-chiniquy worked on the original version and then we worked on this together.

Currently it's on `443` so either use `sudo` or change the port number in the code :-)

```
npm install # install dependencies
make # generate certificate
sudo node examples/heartbeats-only.js
```

Any thoughts?
I think that sounds like overkill. For now features can communicate with the session via the protocol fields on their messages, so like if a 'target': 'endpoint' is present, use the _choose_connection() method, otherwise allow a feature to target a specific endpoint.