With future C++ standards, library will switch to std::optional, however for now we need a wrapper to choose between our bundled implementation, std::experimental::optional (if that's available) and std::optional (when that's available)