After testing Stay, I think it does what you want. Just launch your desired apps and store all open windows. You can then restore them on Stay's menu bar icon, with a shortcut key or have them restored automatically, when you launch each of the apps in question, or change displays.
I emailed Matt, Stay's dev and this is what he had to say about automatic restoration when launching apps and window title pattern matching:
Stay does indeed have an option to restore windows when launching apps. It’s the checkbox labelled "Restore Windows as applications are launched” in Stay’s preferences window.
Stay does its best to restore windows that it hasn’t seen before, but which are similar to windows that have been stored in Stay. When you store a window in Stay, it actually stores a set of attributes that it can use to identify that window, rather than a reference to the specific window that’s being stored. So if Stay sees another window that has the same identifying attributes, it will restore that window with the same size and position.
There are situations where this approach doesn’t actually work all that well in practice though, and as such, Stay has a feature designed to help with this called window title pattern matching. There’s documentation on this feature available here:
The basic gist of it is that you can control how Stay identifies your windows by telling it how to identify windows by their titles. The simplest use case is to set a pattern of .* (period asterisk) on a stored window, which will make that stored window match all of an application’s windows.