Using a `LiteralExpression` in the `AbstractRemoteFileOutboundGateway` (when the user provides a `File` for the directory) causes us to create a new `File` object each time, instead of using the user-supplied `File`. Use a `ValueExpression` instead. Move the `FileWritingMessageHandler` logic to `ExpressionUtils` and use it from both places. Also add a String setter variant for convenient Java Configuration.