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?
What should the error handling logic be here? If a `connect()` fails, should we retry periodically? Same question for disconnected connections. Shall we handle reconnect in `Connection` class?