[ADT] Split optional to only include copy mechanics and dtor for non-trivial types.

This makes uses of Optional more transparent to the compiler (and
clang-tidy) and generates slightly smaller code.

This is a re-land of r317019, which had issues with GCC 4.8 back then.
Those issues don't reproduce anymore, but I'll watch the buildbots
closely in case anything goes wrong.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@322838 91177308-0d34-0410-b5e6-96231b3b80d8
2 files changed