This is a prerequisite for #8023. The httpserver depends on boost::thread::try_join_for, which has no equivalent in std::thread. Rather than going to the effort of porting try_join_for to our interruptible thread wrapper, it's simpler and more efficient to not rely on it in the first place.
755aa05174e06effd758eeb78c5af9fb465e9611 replaces the try_join_for with a future which is set when the callable function finishes. The flow is otherwise the same. I tested that this works as intended by inserting sleeps to force the event_base_loopbreak.
d3773ca9aeb0d2f12dc0c5a0726778050c8cb455 Fixes an incompatibility between boost and std threads. This was likely to be an issue in the future with boost anyway.
Lastly, with the incompatibilities removed, just go ahead and switch to std::thread since there's need for interruption here.