(wangle) Future/Promise detachment
Summary:
Bring a bit more sanity to the lifetime. Now Future and Promise detach by calling the respective methods on State, and they do it during their destruction only. State manages its own lifetime.
Besides being cleaner, this also sets the stage for cancellation (where we'll need Future to hang on to its reference to State after setting the callback), and for folding in Later (we will have a bool for whether the future is hot and hold off executing the callback if it isn't).
Also cleans up various things I noticed while auditing the code for usages of `state_`.
Test Plan:
All the unit tests still pass.
Ran with ASAN (and found I had introduced a bug, then fixed it. yay)
Reviewed By: hannesr@fb.com
Subscribers: jsedgwick, net-systems@, fugalh, exa
FB internal diff:
D1412038
Tasks:
4618297