When instantiating a StateFoldEnvironment we should use a builder pattern.
Besides the inner_middleware and user_data, all have sensible defaults (and even user data could enforce Default trait implementation). This way we instantiate the builder with those to arguments, and we can set all the others using the builder pattern.