Okay, so far I have pushed 0001 and 0002 squashed (commit 5bec1ad4648), 0003 (commit 7d9a4301c08), 0005 and 0006 squashed (commit 2c83f435a3de). In the last one I chose to rename your psql_check to safe_psql and tweaked a few other things, not worthy of individual mention.
I've just noticed that I failed to initialized $$timed_out to zero in PostgresNode::psql if a ref is passed for it.
Fix attached.
The tests are proving useful already; I've shown that timeline following works great with a filesystem-level copy, but that there are WAL retention issues (unsurprisingly) when the backup is created without slots then the slot state is synced over by an external client.