I removed the code that ensures orphaned large messages don't exist.
This code was adding significant complexity for an edge case. Removing it has made the code clearer and simpler and also uncovered bugs, e.g. on reload of large messages they weren't being set durable.
If users really want functionality to clear up large messages, then we can produce a simple script for them to run, if and when they request this.