Optimize memory usage by turning ContinuationHolder into a union
This moves the ContinuationHolder to its own header file and instead of it
having six members for each continuation type, it behaves like a type-safe
union, saving us some memory per each continuation. Once we have C++17, we
could simply typedef ContinuationHolder to std::variant, but for now I
wrote some of the variant-like magic myself.