FYI this looks like it needs a rebase due to a conflict in copy.c and an offset in pgoutput.c.
Is there anything specific that still needs review or do you think you've handled all Peter's concerns? In particular, is there "a comprehensive description of what it is trying to do"? :)