This patch adds a new doWithCleanup abstraction to LLVM that works
with llvm::Error, int, bool, and <insert your own type here>
return types that propagate status.
This abstraction is a more general way of having a conditional cleanup
that can be used with multiple return paths out of a function.
Test cases and a first use case in clang are part of the patch.