What is interest here, in the master this doesn't work:
````java
		RequestReplyExchanger testBean = new RequestReplyExchanger() {

			@Override
			public Message<?> exchange(Message<?> request) {
				return request;
			}

			public String foo(Message<String> request) {
				return request.getPayload().toUpperCase();
			}

		};
````
if I send String payload the `foo` isn't invoked, it always goes to the `exchange`.
With this PR's change works as expected: String payloads go to `foo`, other type - to `exchange`