Split SemiFuture and Future into separate types. Add BasicFuture shared between them.
Summary:
To avoid the risk of bugs caused by a Future being cast to a SemiFuture, and losing some of the properties in the process, this splits SemiFuture and Future into unrelated types, sharing a private superclass for code reuse.
* Add BasicFuture in futures::detail
* Make superclass privately inherited.
* Unset executor when constructing SemiFuture from Future.
Reviewed By: yfeldblum
Differential Revision:
D6177780
fbshipit-source-id:
dea3116aeec0572bb973c2a561e17785199e86f2