Handle duplicate PUBREL
Fixes #138

If the connection to a broker is lost mid qos 2 flow, there is a window where we have processed the PUBREL, released the message and deleted it from our store, but not sent the PUBCOMP. When the connection is re-established, and the PUBREL is resent by the broker, we assume the message still exists - and hit the error reported.

The fix is to check the message is valid before trying to process it. We send the PUBCOMP to complete the flow regardless.