Implement SharedFuture.
Implement SharedFuture.

SharedFuture implements all the same functionality as Future,
but its get() member function does not abandon the shared state
(it can be called repeatedly), and returns a reference into the
shared state instead of moving the value out of the shared state.
Also, SharedFutures are copyable, where regular Futures aren't.
SharedFuture<R> corresponds exactly to std::shared_future<R>.

A SharedFuture can be created from a regular Future via the latter's
member function share().

Quuxplusone/futures-from-scratch,Quuxplusone/futures-from-scratch