message: core: workaround to avoid deadlocks
  We add the start_sending_heartbeats() call the thread queue to avoid
  deadlocks.
  What happens is that the mavlink receiver mutex is locked when a
  heartbeat arrives which then creates the server component to send out
  heartbeats. Creating the server component involves registering for
  mavlink messages which is what blocks.
diff: @@ -540,8 +540,11 @@ void SystemImpl::set_connected()
  _parent.notify_on_discover();
  }
  + // We call this later to avoid deadlocks on creating the server components.
  + _parent.call_user_callback([this]() {
  // Send a heartbeat back immediately.
  _parent.start_sending_heartbeats();
  + });
  if (!_always_connected) {
  register_timeout_handler(
  