scanner: don't fire `online` event if already online
device: attempt to provide an automatic reconnect feature

However, this doesn't really work as expected because when we get a
serious problem, we are not able to flush the pipe of streams correctly.
channel: rework low-level protocol implementation

We don't use streams any more. This was quite complicated to tear off
the pipeline on errors because we had several places were data could be
stuck and `end` events not propagated (the TLS stream and the heartbeat
transformer).

Instead, use a more straightforward approach.

From an API point of view, the user has now to wait for the connect
event before sending anything.
channel: always use a requestId

The use of a requestId is not automatic. The previous commit only used a
requestId if we expect an answer. However, on some cases, like running
an application, a requestId is needed and we don't expect an
answer. Some protocols request a requestId, some other not. Let's use it
always.
dashkiosk: stop communication with device once Dashkiosk receiver has started
dashkiosk: explain what Dashkiosk is
version: release 0.1.0

API has changed a bit:
 - no more .stop() for sessions
 - a user should wait for `connect()` to succeed before trying to do anything