Java DSL: Introduce `FunctionExpression`

Add support for `FunctionExpression` and apply it alongside with `expression`, where it is possible
For example:
```
.enrich(e -> e.requestChannel("enrichChannel")
		.requestPayload(Message::getPayload)
		.shouldClonePayload(false)
		.<Map<String, String>>headerFunction("foo", m -> m.getPayload().get("name")))
```
Remove redundant functional interfaces in favor of `Function`
Minor polish here: https://github.com/garyrussell/spring-integration-extensions/commit/1120e2ecabbbcbee18b30f60bf7aad194232ad34

`readOnlyException` doesn't seem right here - we're only "reading" the type.

That said, can't we determine the return type by introspecting the `Function` ?