code: public static <T extends Throwable> Throwable peel(final Throwable t, Class<T> allowedType, String message) {
          return peel(t, allowedType, message, HAZELCAST_EXCEPTION_FACTORY);
      }
docs: Processes {@code Throwable t} so that the returned {@code Throwable}'s type matches {@code allowedType} or
  {@code RuntimeException}. Processing may include unwrapping {@code t}'s cause hierarchy, wrapping it in a
  {@code HazelcastException} or just returning the same instance {@code t} if it is already an instance of
  {@code RuntimeException}.
  
  @param t           {@code Throwable} to be peeled
  @param allowedType the type expected to be returned; when {@code null}, this method returns instances
  of {@code RuntimeException}
  @param message     if not {@code null}, used as the message in the {@code HazelcastException} that
  may wrap the peeled {@code Throwable}
  @param <T>         expected type of {@code Throwable}
  @return the peeled {@code Throwable}