[coroutines] Add std::experimental::task<T> type
Adds the coroutine std::experimental::task<T> type described in proposal P1056R0.
This implementation allows customization of the allocator used to allocate the
coroutine frame by passing std::allocator_arg as the first argument, followed by
the allocator to use.
This supports co_awaiting the same task multiple times. The second and
subsequent times it returns a reference to the already-computed value.
This diff also adds some implementations of other utilities that have potential for
standardization as helpers within the test/... area:
- sync_wait(awaitable) - See P1171R0
Move the definition of the aligned_allocation_size helper function
from <experimental/memory_resource> to <experimental/memory>
so it can be more widely used without pulling in memory_resource.
- Use C++14 keywords directly rather than macro versions eg. use noexcept instead of _NOEXCEPT).
- Add support for overaligned coroutine frames. This may need wording in the Coroutines TS to support passing the extra std::align_val_t.
- Eliminate use of if constexpr if we want it to compile under C++14.
Patch by @lewissbaker (Lewis Baker).