This avoids the continuous API churn when upgrading things to use
std::optional and makes trivial string replace upgrades possible.
The needed tweaks are mostly trivial, the one nasty bit is Clang's usage
of OptionalStorage. To keep this working old Optional stays around as
clang::CustomizableOptional, with the default Storage removed.
Optional<File/DirectoryEntryRef> is replaced with a typedef.
I tested this with GCC 7.5, the oldest supported GCC I had around.
Nit: C-style casts are generally discouraged (there are several occurrences in this patch).