Connection Disconnect event is only emitted in case MQTTClient destroyed is invoked by client or it is deallocated from memory.
In case of internal Reconnect, Auth Failure Handling, Keep Alive Failure Handling, the event won't be emitted.
The purpose is to help users differentiate events between explicit/implicit disconnect. For example when they want to create a polling service, they should be able reliably listen to connection disconnect to cancel polling as it is an explicit disconnect by Courier.
This MR contains following changes: