As far as it is a `Builder` and all it's methods are chained, for me it looks better do not name them as setters.
I mean this:
`AmqpMessageBuilder.fromMessage(message).header("foo", "bar").correlationId(correlation).build()`
Should we have in addition `*IfAbsent` methods, `copyHeaders`, `removeHeaders`?

Anyway LGTM.
I was going to suggest this:
`Message m = MessageBuilder.withBody().withProperties((PropertiesConfigurer p) -> p.header().contentType())`
But it would be overhead for this linear `Builder`...