adding loggingReceive
first stab at keepAlive logic
added support for publishing QOS 1 and 2.  also added a few test cases
added QoS 2 support.  added subscribe support to API
Handling Chris's pull request with a rather massive refactoring of 'Protocol'
and 'Transport'.

The basic idea behind this is to be able to somehow mock 'Transport' in order
to write tests for 'Protocol'. I look for a clean separation between the low
level communication logic, handled through Akka.io and the MQTT protocol logic.

That's why I finally turned 'Transport' into an actor, able to interact with a
TCP actor from Akka.io, and 'Protocol' into a trait trying to describe the pure
MQTT logic. When receiving messages, where ever they come from, 'Transport' asks
its 'Protocol' facet what to do. This is described by an 'Action' trait and it
hierarchy of case classes which are then interpreted by 'Transport'.
Merging Chris's (cridmann) pull request into master