messageOrEmpty

Returns this throwable's Throwable.message, or an empty string when it has none.

Centralises the nullable-message read so callers can surface an error string without repeating the null check; both branches are exercised by io.rekast.sdk.sample.utils tests.