Backport put fsm forwarding.

Takes #627, #700, and #913 and puts them in one pull request to take the put fsm forwarding feature from 2.0 and place it in 1.4.

Tasks remaining:

- [ ] Create an r_t to test the feature. If that cannot be done in the next 3 days (EOD Friday) at least be able to create a step-by-step manual verification process.
- [ ] If commit c927c7faa8b (or its descendants) is correct & is well-reviewed, then it should also be applied to `develop`.