Adding SyncExtract

Hold me back, but I think this is getting to type class territory. We could have a single `withTemporary` and do away with this (on the condition that we _newtype_ all of the instances, and don't have orphans everywhere. Normally, I would be the first to :-1: this idea, but this is getting to the threshold, and we can also do some tuple implementations to remove the nesting.

@charleso @nhibberd Thoughts?