code: public <X> void propertyImmutable(P property, X newValue, @Nullable X foundValue, Function<X, Object> converter) {
          Objects.requireNonNull(property);
  
          if (foundValue == null) {
              property(property, converter.apply(newValue));
  
          } else if (!foundValue.equals(newValue)) {
              throw TransactionException.immutableProperty(foundValue, newValue, property);
          }
      }
docs: Sets a property which cannot be mutated
  
  @param property   The key of the immutable property to mutate
  @param newValue   The new value to put on the property (if the property is not set)
  @param foundValue The current value of the property
  @param converter  Helper method to ensure data is persisted in the correct format